7 8 #.#####. #.a#..r. #..#x... ..#..#.# #...##.. .#...... ........Sample Output
13
思路:这道题样例十分水,因为不用优先队列也可以过这组样例,所以为了避免其他人犯同样的错误,本博主就再弄一组样例:
输入:
7 8
a######r
........
#..#x...
..#..#.#
#...##..
.#......
........
输出:9
正确代码:
#include
#include
#include
#include
#include
#include
#include
using namespace std;
char map[210][210];
int d[4][2]= {{1,0},{-1,0},{0,1},{0,-1}};
int n,m;
struct node
{
int x,y,t;
} q,p;
struct cmp{
bool operator () (node &a,node &b)
{
return a.t>b.t;
}
};//优先队列模板。
bool check(int p,int pp)
{
if(p<0||pp<0||p>=m||pp>=n||map[p][pp]=='#')
return 0;
return 1;
}
void bfs()
{
priority_queue,cmp>que;//创建一个优先队列。最小值优先。
que.push(q);
while(!que.empty())
{
q=que.top();
que.pop();
for(int i=0; i<4; i++)
{
p.x=q.x+d[i][0];
p.y=q.y+d[i][1];
if(check(p.x,p.y))
{
if(map[p.x][p.y]=='x')
p.t=q.t+2;
else
p.t=q.t+1;
if(map[p.x][p.y]=='a')
{
printf("%d\n",p.t);
return ;
}
que.push(p);
map[p.x][p.y]='#';
}
}
}
printf("Poor ANGEL has to stay in the prison all his life.\n");
}
int main()
{
while(~scanf("%d%d%*c",&m,&n))
{
memset(map,0x00,sizeof(map));
for(int i=0; i