原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1240
题记:一个三维空间的BFS题目,要注意题目输入不是按照我们平时的(x,y,z)输入的,例如输入的起点(x,y,z),实际上在我们输入的三维数组里是以(z,x,y)表示的,即我们输入的第一层循环是控制z的。在处理的时候需要注意。剩下的直接套BFS模板即可。
#include<bits/stdc++.h>
using namespace std;
const int N=15;
int a[N][N][N];
int n,dx,dy,dz,nx,ny,nz;
#define CHECK(x,y,z) (x<n&&x>=0&&y<n&&y>=0&&z<n&&z>=0)
struct node{
int x,y,z;
int t;
};
int dir[6][3]{
{1,0,0},
{0,1,0},
{0,0,1},
{-1,0,0},
{0,-1,0},
{0,0,-1}
};
int bfs(){
int num=0;
queue<node>q;
node start,next;
start.x=dx;
start.y=dy;
start.z=dz;
start.t=0;
q.push(start);
if(start.x==ny&&start.y==nz&&start.z==nx){
return start.t;
}
while(!q.empty()){
start=q.front();
q.pop();
for(int i=0;i<6;i++){
next.x=start.x+dir[i][0];
next.y=start.y+dir[i][1];
next.z=start.z+dir[i][2];
next.t=start.t+1;
if(next.x==nx&&next.y==ny&&next.z==nz)
return next.t;
if(CHECK(next.x,next.y,next.z)&&a[next.x][next.y][next.z]){
a[next.x][next.y][next.z]=0;
q.push(next);
}
}
}
return -1;
}
int main(){
string s;
while(cin>>s>>n){
char c;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
for(int k=0;k<n;k++){
cin>>c;
if(c=='O')
a[i][j][k]=1;
else
a[i][j][k]=0;
}
}
}
cin>>dy>>dz>>dx;
cin>>ny>>nz>>nx;
cin>>s;
int ans=bfs();
if(ans!=-1)
cout<<n<<" "<<ans<<endl;
else
cout<<"NO ROUTE"<<endl;
}
return 0;
}