You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

88 lines
1.9 KiB

2 years ago
//BFS<46><EFBFBD><E3B7A8><EFBFBD><EFBFBD>
//https://blog.csdn.net/qq_42757965/article/details/82019460
//<2F><><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#include<stdio.h>
#include<string.h>
#include<queue>
using namespace std;
const int maxn=205;
char ch[maxn][maxn];
int dis[maxn][maxn];//<2F><>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˱<EFBFBD><CBB1><EFBFBD>Ϊ1,û<><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ0<CEAA><30>
int d[4][2]={1,0,-1,0,0,1,0,-1};//<2F><><EFBFBD>ߵ<EFBFBD><DFB5>ĸ<EFBFBD><C4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int n,m;
int edx,edy,enx,eny;
struct stu
{
int x;
int y;
int step;
}A,B;
void bfs(int x,int y)
{
queue<stu> que;
A.x=x;
A.y=y;
A.step=0;
dis[x][y]=1;
que.push(A);
int cnt=-1;
while(!que.empty())
{
A=que.front();//<2F>Ѷ<EFBFBD><D1B6>еĶ<D0B5><C4B6><EFBFBD>Ԫ<EFBFBD><D4AA>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
que.pop();
if(A.x==enx&&A.y==eny)//<2F><><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD>ô<EFBFBD><C3B4><EFBFBD><EFBFBD><EFBFBD>ͽ<EFBFBD><CDBD><EFBFBD><EFBFBD>ˡ<EFBFBD>
{
cnt=A.step;
break;
}
for(int i=0;i<4;i++)//һ<><D2BB><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD><DFB5>ĸ<EFBFBD><C4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
B.x=A.x+d[i][0];
B.y=A.y+d[i][1];
if(B.x>=0&&B.x<n&&B.y>=0&&B.y<m&&dis[B.x][B.y]==0&&ch[B.x][B.y]!='#')//<2F>ж<EFBFBD><D0B6><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ܲ<EFBFBD><DCB2><EFBFBD><EFBFBD>ߣ<EFBFBD>
{
if(ch[B.x][B.y]=='x') B.step=A.step+2;
else B.step=A.step+1;
dis[B.x][B.y]=1;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><D1BE>߹<EFBFBD><DFB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
que.push(B);//<2F><><EFBFBD>ߵ<EFBFBD><DFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><DAB5>Ž<EFBFBD><C5BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
}
}
if(cnt == -1) puts("Poor ANGEL has to stay in the prison all his life.");
else
printf("%d\n", cnt);
}
int main()
{
while(~scanf("%d %d",&n,&m ))
{
A.step=0;
B.step=0;
memset(dis,0,sizeof(dis));
for(int i=0;i<n;i++)
scanf("%s",ch[i]);
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
if(ch[i][j]=='a')
{
edx=i;
edy=j;
}
if(ch[i][j]=='r')
{
enx=i;
eny=j;
}
}
}
bfs(edx,edy);
}
return 0;
}