Qiuqiqiu  
不管道路多么崎岖坎坷,我永远不停下追逐梦想的脚步!

http://acm.hdu.edu.cn/showproblem.php?pid=2822

BFS+优先队列

我的代码
 1 #include <cstdio>
2 #include <cstring>
3 #include <queue>
4 using namespace std;
5 const int N=1010;
6 const int dx[4]={0,1,0,-1};
7 const int dy[4]={1,0,-1,0};
8 char maze[N][N];
9 int vis[N][N],dis[N][N];
10 int m,n;
11 struct coor
12 {
13 int x,y;
14 };
15 struct qcmp
16 {
17 bool operator() (const coor a,const coor b)
18 {
19 return dis[a.x][a.y]>dis[b.x][b.y];
20 }
21 };
22 priority_queue<coor,vector<coor>,qcmp> q;
23 int bfs(int x,int y,int ex,int ey)
24 {
25 if (x==ex && y==ey) return 0;
26 while (!q.empty()) q.pop();
27 vis[x][y]=1; dis[x][y]=0;
28 coor u={x,y};
29 q.push(u);
30 while (!q.empty())
31 {
32 u=q.top(); q.pop();
33 x=u.x; y=u.y;
34 for (int d=0;d<4;d++)
35 {
36 int nx=x+dx[d];
37 int ny=y+dy[d];
38 if (!maze[nx][ny] || vis[nx][ny]) continue;
39 vis[nx][ny]=1;
40 dis[nx][ny]=dis[x][y];
41 if (maze[nx][ny]=='.') dis[nx][ny]++;
42 if (nx==ex && ny==ey) return dis[nx][ny];
43 coor v={nx,ny};
44 q.push(v);
45 }
46 }
47 return -1;
48 }
49 int main()
50 {
51 int i,sx,sy,ex,ey,ans;
52 while (scanf("%d%d",&n,&m),n||m)
53 {
54 memset(vis,0,sizeof(vis));
55 memset(dis,0,sizeof(dis));
56 memset(maze,0,sizeof(maze));
57 for (i=1;i<=n;i++) scanf("%s",maze[i]+1);
58 scanf("%d%d%d%d",&sx,&sy,&ex,&ey);
59 ans=bfs(sx,sy,ex,ey);
60 printf("%d\n",ans);
61 }
62 return 0;
63 }

 

posted on 2012-01-16 22:31  Qiuqiqiu  阅读(214)  评论(0编辑  收藏  举报