• 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;
    }


  • 相关阅读:
    Docker ntpdate Permition error
    Sublime+Golang Plugin
    顺序表和链表的区别
    Python 性能优化——对象绑定
    Fix git 提交代码错误
    UVa 10523
    UVa 10551
    UVa 10814
    UVa 10925
    Practice Round China New Grad Test 2014 报告
  • 原文地址:https://www.cnblogs.com/pngcui/p/4335895.html
Copyright © 2020-2023  润新知