#include<iostream>
using namespace std;
#include<string.h>
#define max 105
long a[100000],step,sum,n,m,visited[max][max];
long directions[4][2]={{0,1},{1,0},{0,-1},{-1,0}};
int mxr;
struct map{
int turn;
char value;
int now;//记录转过几次
}map[max][max];
void DFS(int x,int y)
{
int i,mx,my;
if(map[x][y].value=='r')
a[sum++]=step;
else if(map[x][y].value!='#')
{
for(i=0;i<4;i++)
{
mx=x+directions[i][0];
my=y+directions[i][1];
if(map[mx][my].value!='#'&&mx>=1&&mx<=n&&my>=1&&my<=m&&!visited[mx][my])//不是墙并且没走过
{
step++;
visited[mx][my]=1;
DFS(mx,my); //所以关键要得到值的是递归的这一步 推导的时候让这个的下一个DFS就是到达朋友那点比较好理解为什么后面要还原
visited[mx][my]=0;//这一步的原因,上面DFS进行完后要将状态还原
step--; //下面这些都要还原
}
}
}
}
int main()
{
long i,j,x,y,min;
while(cin>>n>>m)
{
memset(visited,0,sizeof(visited));
sum=0;
step=0;
min=max;
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
cin>>map[i][j].value;
map[i][j].turn=-1;
map[i][j].now=0;
}
}
cin>>mxr;
int x1,y1,x2,y2;
cin>>x1>>y1>>x2>>y2;
visited[x1][y1]=1;
map[x2][y2]='r';
DFS(x,y);
if(sum==0)
cout<<"Poor ANGEL has to stay in the prison all his life."<<endl;
else
{
for(i=0;i<sum;i++)
if(a[i]<min)
min=a[i];
cout<<min<<endl;
}
}
return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
today lazy . tomorrow die .
浙公网安备 33010602011771号