这道题没看懂题,也没想到天使有多个朋友,而且特坑的是多组输入,唉被坑了,真不爽,dfs足以解决了
AC代码:
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<math.h>
#include<cstring>
#include<queue>
using namespace std;
#define N 250
char Map[N][N];
int dir[4][2]={1,0,0,1,0,-1,-1,0};
int book[N][N],minx,sx,sy,ex,ey,n,m,flag;
void dfs(int sx,int sy,int step)
{
if(Map[sx][sy]=='r')
{
if(minx>step)
{minx=step;
flag=0;
}
return ;
}
for(int i=0;i<4;i++)
{
int tx=sx+dir[i][0];
int ty=sy+dir[i][1];
if(book[tx][ty]||tx<1||ty<1||tx>n||ty>m||Map[tx][ty]=='#')
continue;
book[tx][ty]=1;
if(Map[tx][ty]=='x')
dfs(tx,ty,step+2);
else
dfs(tx,ty,step+1);
book[tx][ty]=0;
}
return ;
}
int main()
{
while(~scanf("%d %d",&n,&m))
{ flag=1;
memset(book,0,sizeof(book));
int flag1=0,flag2=0;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
cin>>Map[i][j];
}
for(int i=1;i<=n;i++)
{
if(flag1)
break;
for(int j=1;j<=m;j++)
{
if(Map[i][j]=='a')
{sx=i,sy=j;
flag1=1;
break;
}
}
}
minx=99999999;
//book[sx][sy]=1;
dfs(sx,sy,0);
if(flag)
printf("Poor ANGEL has to stay in the prison all his life.\n");
else
printf("%d\n",minx);
}
}