题目大意:先输入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