dfs
可能有多个朋友 所以从angel搜朋友 遇到朋友就停止
#include <iostream>
#include <algorithm>
#include <set>
#include <map>
#include <string.h>
#include <queue>
#include <sstream>
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
using namespace std;
const int MAX = 202;
int n,m,t;
char p[MAX][MAX];
int vis[MAX][MAX];
int dir[4][2] = {{1,0},{-1,0},{0,1},{0,-1}};
int sx,sy;
void dfs (int x,int y,int ans )
{
if ( p[x][y] == 'r' )
{
if (t > ans)
t = ans;
return ;
}
for(int i=0;i<4;i++)
{
int xx = x + dir[i][0];
int yy = y + dir[i][1];
if (xx >=0 && xx<n && yy>=0 && yy<m && !vis[xx][yy] && p[xx][yy]!='#')
{
if (p[xx][yy] == '.' || p[xx][yy]=='r' )
{
vis[xx][yy] = 1;
dfs (xx,yy,ans+1);
vis[xx][yy] = 0;
}
else
{
vis[xx][yy] = 1;
dfs (xx,yy,ans+2);
vis[xx][yy] = 0;
}
}
}
}
int main ()
{
while (scanf("%d %d",&n,&m)!=EOF)
{
for(int i=0;i<n;i++)
{
scanf("%s",p[i]);
}
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
if (p[i][j] == 'a')
{
sx = i;
sy = j;
break;
}
}
}
int ans = 0;
t = INT_MAX;
dfs (sx,sy,ans);
if (t != INT_MAX )
printf("%d\n",t);
else
printf("Poor ANGEL has to stay in the prison all his life.\n");
}
return 0;
}