Asteroids! HDU - 1240 三維BFS

#include<bits/stdc++.h>
using namespace std;
//Life is Short!
char a[15][15][15];//zxy
bool vis[15][15][15];
struct node{
    int x,y,z;
    int step;
}s,t;
int dir[][3]={
    0,0,1,
    0,0,-1,
    0,-1,0,
    0,1,0,
    -1,0,0,
    1,0,0
};

int main(){
    int n;
    char tmp[10];
    while(cin>>tmp>>n){
        memset(vis,0,sizeof vis);
        for(int i=0;i<n;++i){
            for(int j=0;j<n;++j){
                scanf("%s",a[i][j]);
            }
        }
        int x,y,z;
        scanf("%d%d%d",&y,&x,&z);
        s={x,y,z,0};
        scanf("%d%d%d",&y,&x,&z);
        t={x,y,z,0};
        scanf("%s",&tmp);

        bool flag=0;
        queue<node>q;
        q.push(s);
        while(!q.empty()){
            auto e=q.front();
            q.pop();
            if(e.x==t.x&&e.y==t.y&&e.z==t.z){
                cout<<n<<" "<<e.step<<endl;
                flag=true;
                break;
            }
            for(int i=0;i<6;++i){
                int nx=e.x+dir[i][0],ny=e.y+dir[i][1],nz=e.z+dir[i][2];
                if(nx>=0&&nx<n&&ny>=0&&ny<n&&nz>=0&&nz<n&&!vis[nz][nx][ny]&&a[nz][nx][ny]!='X'){
                    q.push({nx,ny,nz,e.step+1});
                    vis[nz][nx][ny]=1;
                }
            }
        }
        if(!flag) puts("NO ROUTE");
    }
    return 0;
}

PS:即便是“已經掌握得很好了”的BFS,也不能做到在看到題後很流暢地AC,前路多艱,繼續努力吧。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章