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.
|
|
|
|
//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;
|
|
|
|
|
}
|
|
|
|
|
|