一个三维的迷宫,直接bfs,水题。 #include<iostream> using namespace std; #define N 32 struct Point { int level,row,col,step; }; Point queue[N*N*N]; int visited[N][N][N]; int sx,sy,sz,ex,ey,ez,l,r,c; int dir[6][3]={{1,0,0},{-1,0,0},{0,0,-1},{0,0,1},{0,-1,0},{0,1,0}}; char maze[N][N][N]; void bfs() { int front=-1,rear=0; int next_x,next_y,next_z,i; bool flag=false; memset(visited,0,sizeof(visited)); queue[0].level=sz; queue[0].row=sx; queue[0].col=sy; queue[0].step=0; visited[sz][sx][sy]=1; Point temp,add; while(front<rear&&!flag) { temp=queue[++front]; if(temp.level==ez&&temp.row==ex&&temp.col==ey) { flag=true; break; } for(i=0;i<6;i++) { next_x=temp.row+dir[i][1]; next_y=temp.col+dir[i][2]; next_z=temp.level+dir[i][0]; if(next_x>-1&&next_x<r&&next_y>-1&&next_y<c&&next_z>-1 &&next_z<l&&!visited[next_z][next_x][next_y] &&maze[next_z][next_x][next_y]!='#') { visited[next_z][next_x][next_y]=1; add.row=next_x; add.col=next_y; add.level=next_z; add.step=temp.step+1; queue[++rear]=add; } } } if(flag) printf("Escaped in %d minute(s)./n",temp.step); else printf("Trapped!/n"); } int main() { int i,j,k; while(scanf("%d%d%d",&l,&r,&c)) { if(l==0&&r==0&&c==0) break; for(i=0;i<l;i++) for(j=0;j<r;j++) scanf("%s",maze[i][j]); for(i=0;i<l;i++) for(j=0;j<r;j++) for(k=0;k<c;k++) { if(maze[i][j][k]=='S') { sx=j,sy=k,sz=i; } if(maze[i][j][k]=='E') { ex=j,ey=k,ez=i; } } bfs(); } return 0; }