hdu 2102 BFS

 简单的3维BFS

大写的YES和NO,这心粗的....唉

#include<iostream>
#include<cstdio>
#include<queue>

using namespace std;

char map[2][12][12];
int d[2][3];
int dir[4][2]={0,1,0,-1,-1,0,1,0};
int n,m,t;

struct node{
    int x,y,z;
    int step;
};

int bfs(){
    queue<node>q;
    node cur,next;
    cur.z=d[0][0];
    cur.x=d[0][1];
    cur.y=d[0][2];
    cur.step=t;
    q.push(cur);
    while(!q.empty()){
        cur=q.front();
        q.pop();
        if(cur.z==d[1][0]&&cur.x==d[1][1]&&cur.y==d[1][2]){
            if(cur.step>=0)
                return 1;
            return 0;
        }
        for(int i=0;i<4;i++){
            next.x=dir[i][0]+cur.x;
            next.y=dir[i][1]+cur.y;
            next.z=cur.z;
            if(map[next.z][next.x][next.y]=='#'){       
                if(next.z)
                    next.z=0;
                else
                    next.z=1;
            }
            if(next.x>=0&&next.x<n&&next.y>=0&&next.y<m&&map[next.z][next.x][next.y]!='*'){
                next.step=cur.step-1;
                map[next.z][next.x][next.y]='*';
                q.push(next);
            }
        }
    }
    return 0;
}

int main(){
    //freopen("2102.in", "r", stdin);
    int c,i,j,k;
    cin>>c;
    while(c--){
        cin>>n>>m>>t;
        for(i=0;i<2;i++){
            for(j=0;j<n;j++){
                scanf("%s",map[i][j]);
                for(k=0;k<m;k++){
                    if(map[i][j][k]=='S'){
                        d[0][0]=i;
                        d[0][1]=j;
                        d[0][2]=k;
                    }
                    else if(map[i][j][k]=='P'){
                        d[1][0]=i;
                        d[1][1]=j;
                        d[1][2]=k;
                    }
                    else if(i&&map[i][j][k]=='*'&&map[0][j][k]=='#')    //2层是墙,不能传过来
                        map[0][j][k]='*';
                    else if(i&&map[i][j][k]=='#'&&(map[0][j][k]=='#'||map[0][j][k]=='*')){
                        map[0][j][k]='*';                               //2层是传送机
                        map[1][j][k]='*';
                    }
                }
            }
        }
        if(bfs())
            cout<<"YES"<<endl;
        else
            cout<<"NO"<<endl;
    }
    return 0;
}


原文地址:https://www.cnblogs.com/pngcui/p/4335895.html