Rescue--hdu1242

题目链接:

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

运用优先队列进行广搜

 1 #include <stdio.h>
 2 #include<iostream>
 3 #include <string.h>
 4 #include <queue>
 5 #include <algorithm>
 6 #define inf 0x6ffffff
 7 #define N 220
 8 using namespace std;
 9 
10 int n,m,vis[N][N];
11 int dir[4][2]={ {0,1},{0,-1},{1,0},{-1,0} };
12 char maps[N][N];
13 
14 struct node
15 {
16     int x,y,step;
17     friend bool operator < (node a,node b)
18     {
19         return a.step > b.step;
20     }
21 };
22 bool judge(int x,int y)
23 {
24     return x<n&&x>=0&&y>=0&&y<m&&vis[x][y]==0&&maps[x][y]!='#';
25 }
26 int bfs(node s,node e)
27 {
28     memset(vis,0,sizeof(vis));
29     node q;
30     priority_queue<node> Q;
31     Q.push(s);
32     vis[s.x][s.y]=1;
33     while(!Q.empty())
34     {
35         q=Q.top();
36         Q.pop();
37         if(q.x==e.x&&q.y==e.y)
38             return q.step;
39 
40         for(int i=0;i<4;i++)
41         {
42             s.x=q.x+dir[i][0];
43             s.y=q.y+dir[i][1];
44             if(judge(s.x,s.y))
45             {
46                 if(maps[s.x][s.y]=='x')
47                     s.step=q.step+2;
48                 else
49                     s.step=q.step+1;
50                 vis[s.x][s.y]=1;
51                 Q.push(s);
52             }
53         }
54     }
55     return -1;
56 }
57 
58 int main()
59 {
60     int i,j,ans;
61     node s,e;
62     while(scanf("%d%d",&n,&m)!=EOF)
63     {
64         memset(maps,0,sizeof(maps));
65         for(i=0;i<n;i++)
66         {
67             for(j=0;j<m;j++)
68             {
69                 cin>>maps[i][j];
70                 if(maps[i][j]=='a')
71                     s.x=i,s.y=j;
72                 if(maps[i][j]=='r')
73                     e.x=i,e.y=j;
74             }
75         }
76         s.step=0;
77 
78         ans=bfs(s,e);
79 
80         if(ans==-1)
81             printf("Poor ANGEL has to stay in the prison all his life.\n");
82         else
83             printf("%d\n",ans);
84     }
85     return 0;
86 }

 

你可能感兴趣的:(HDU)