#include<cstdio> #include<cstring> #include<queue> using namespace std; const int maxn=30+2; struct node{ int x,y,z; node(int x=0,int y=0,int z=0):x(x),y(y),z(z){} }ns,nt; char g[maxn][maxn][maxn]; int d[maxn][maxn][maxn]; int L,R,C; int dir[][3]={{-1,0,0},{1,0,0},{0,-1,0},{0,1,0},{0,0,-1},{0,0,1}}; bool isValid(node &nd){ return nd.x>=0&&nd.x<C && nd.y>=0&&nd.y<R && nd.z>=0&&nd.z<L; } void bfs(){ memset(d,0,sizeof(d)); queue<node>q; q.push(ns); while(!q.empty()){ node u=q.front(); q.pop(); if(u.z==nt.z&&u.x==nt.x&&u.y==nt.y){ printf("Escaped in %d minute(s).\n",d[u.x][u.y][u.z]); return ; } for(int i=0;i<6;i++){ node v=node(u.x+dir[i][0],u.y+dir[i][1],u.z+dir[i][2]); if(isValid(v) && !d[v.x][v.y][v.z] && g[v.z][v.y][v.x]!='#'){ q.push(v); d[v.x][v.y][v.z]=d[u.x][u.y][u.z]+1; } } } printf("Trapped!\n"); } int main(){ while(scanf("%d%d%d",&L,&R,&C)==3 &&L){ getchar(); //吃掉换行 for(int i=0;i<L;i++){ for(int j=0;j<R;j++){ for(int k=0;k<C;k++){ scanf("%c",&g[i][j][k]); if(g[i][j][k]=='S')ns.z=i,ns.y=j,ns.x=k; if(g[i][j][k]=='E')nt.z=i,nt.y=j,nt.x=k; } getchar(); //吃掉换行 } getchar(); //吃掉换行 } bfs(); } return 0; }
POJ 2251 Dungeon Master(简单BFS)
三维立体型迷宫 ,输入是一层一层向上。