HDU 1242 Rescue

这道题没看懂题,也没想到天使有多个朋友,而且特坑的是多组输入,唉被坑了,真不爽,dfs足以解决了
AC代码:

#include
#include
#include
#include
#include
#include
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);

}
}

你可能感兴趣的:(HDU 1242 Rescue)