简单的广度优先算法,跟二维差不多,可是提交上去居然WA,原来输入 是目标是先列,行,层,所以参数换一下位置就OK了。 #include<iostream> #include<string.h> using namespace std; #define MAX 12 char space[MAX][MAX][MAX]; int mark[MAX][MAX][MAX]; int num; int queue[3000]; int step[18]={0,0,1, 0,0,-1, 0,1,0, 0,-1,0, 1,0,0, -1,0,0}; int bfs(int x,int y,int z,int l,int m,int n) { int rear=-1,front=-1; int a,b,c,u,v,w; memset(mark,0,sizeof(mark)); mark[x][y][z]=0; queue[++rear]=x; queue[++rear]=y; queue[++rear]=z; while(rear>front) { a=queue[++front]; b=queue[++front]; c=queue[++front]; if(a==l &&b==m && c==n) { return mark[a][b][c]; } for(int k=0;k<18;k=k+3) { u=a+step[k]; v=b+step[k+1]; w=c+step[k+2]; if(u>-1 && v>-1 && w>-1 && u<num && v<num && w<num && mark[u][v][w]==0 && space[u][v][w]!='X') { queue[++rear]=u; queue[++rear]=v; queue[++rear]=w; mark[u][v][w]=mark[a][b][c]+1; } } } return -1; } int main() { int i,j,k; int x,y,z,l,m,n,sum; char end[4],start[6]; while(cin>>start>>num) { for(k=0;k<num;k++) for(i=0;i<num;i++) for(j=0;j<num;j++) cin>>space[i][j][k]; cin>>x>>y>>z; cin>>l>>m>>n; cin>>end; sum=bfs(y,x,z,m,l,n); if(sum!=-1) cout<<num<<" "<<sum<<endl; else cout<<"NO ROUTE"<<endl; } return 0; }