题目大意:先输入START N 表示这个立方体的层数是N,每一层为一个NxN的正方形。。其实就是一个NxNxN的正方体,输入时一层一层的输入。
输入完立方体后,输入起点和终点的坐标。
输出是 先输出 N 再输出最短路径的步数。如果走不到终点,输出NO ROUTE。
坑点:它输入的起点和终点坐标不与我们输入的立方体对应。
#include <cstdio> #include <cstring> #include <iostream> #include <queue> #include <string> #define M 11 using namespace std; struct node{ int x,y,z; int t; }; int dir[6][3]={{0,0,1},{0,1,0},{1,0,0},{0,0,-1},{0,-1,0},{-1,0,0}}; int N; int sa,sb,sc,ea,eb,ec; char maze[M][M][M]; bool judge(int x,int y,int z){ if(x<0||x>=N||y<0||y>=N||z<0||z>=N){ return true; } if(maze[x][y][z]=='X') { return true; } return 0; } int bfs(){ queue<node> myque; node now,next; now.x=sa; now.y=sb; now.z=sc; now.t=0; myque.push(now); if(now.x==eb&&now.y==ec&&now.z==ea) { return now.t; } while(!myque.empty()) { now=myque.front(); myque.pop(); for(int i=0;i<6;i++) { next.x=now.x+dir[i][0]; next.y=now.y+dir[i][1]; next.z=now.z+dir[i][2]; next.t=now.t+1; if(judge(next.x,next.y,next.z)) { continue; } if(next.x==ea&&next.y==eb&&next.z==ec) { return next.t; } maze[next.x][next.y][next.z]='X'; myque.push(next); } } return -1; } int main(){ string s; while(cin>>s,scanf("%d",&N)!=EOF){ for(int i=0;i<N;i++) { for(int j=0;j<N;j++) { for(int k=0;k<N;k++) { cin>>maze[i][j][k]; } } } cin>>sb>>sc>>sa>>eb>>ec>>ea>>s; int anw; anw=bfs(); if(anw!=-1) printf("%d %d\n",N,anw); else if(anw==-1) printf("NO ROUTE\n"); } }
HDU1240-题目意思详解( 三维BFS),布布扣,bubuko.com
原文地址:http://blog.csdn.net/enterpine/article/details/38587105