HDU 2102 A计划

坑点:1:当两边都是#号是,是死路

            2:当两边种,一边是#,另一边是*是,也是死路。

其他都没啥好说的

这是一道比较难搞定的搜索题,三维立体搜索。

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
const int maxm=20;
char map[maxm][maxm][maxm];
int vis[maxm][maxm][maxm];
int m,n,time;
int dir[4][2]= {{1,0},{-1,0},{0,1},{0,-1}};
struct node
{
    int x;
    int y;
    int z;
    int step;
} queue[maxm*maxm*maxm];
void bfs()
{
    struct node now,pre;
    int e=0,h=1;
    queue[0].x=0;
    queue[0].y=0;
    queue[0].z=0;
    queue[0].step=0;
    vis[0][0][0]=1;
    while(e<h)
    {
        pre=queue[e];
        if(map[pre.z][pre.x][pre.y]=='P')
        {
            printf("YES\n");
            return;
        }
        for(int i=0; i<4; i++)
        {
            now.x=pre.x+dir[i][0];
            now.y=pre.y+dir[i][1];
            now.z=pre.z;//非常重要
            now.step=pre.step+1;
           if(now.x>=0&&now.x<m&&now.y>=0&&now.y<n&&now.step<=time&&(!vis[now.z][now.x][now.y])&&map[now.z][now.x][now.y]!='*')
           {
               if(map[now.z][now.x][now.y]=='#')
               {
                   vis[now.z][now.x][now.y]=1;
                   now.z=!now.z;
               }
               vis[now.z][now.x][now.y]=1;
               queue[h++]=now;
           }
        }
        e++;
    }
    printf("NO\n");
    return;
}
int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        int i,j,k;
        memset(vis,0,sizeof(vis));
        scanf("%d%d%d",&m,&n,&time);
        for(i=0; i<2; i++)
        {
            for(j=0; j<m; j++)
            {
                scanf("%s",map[i][j]);
            }
        }
        for(i=0;i<2;i++)
        {
            for(j=0;j<m;j++)
            {
                for(k=0;k<n;k++)
                {
                    if((map[i][j][k]=='#'&&map[!i][j][k]=='#')||(map[i][j][k]=='*'&&map[!i][j][k]=='#')||(map[i][j][k]=='#'&&map[!i][j][k]=='*'))
                    {
                        map[i][j][k]=map[!i][j][k]='*';
                    }
                }
            }
        }
        bfs();
    }
    return 0;
}

你可能感兴趣的:(HDU 2102 A计划)