#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
int k,n,m,sx,sy,sz,ex,ey,ez;
int to[6][3]={{0,0,1},{0,0,-1},{0,1,0},{0,-1,0},{1,0,0},{-1,0,0}};
char map[35][35][35];
int vis[35][35][35];
struct node{
int x,y,z,step;
};
int check(int x,int y,int z){
if(x<0||y<0||z<0||x>=k||y>=n||z>=m)
return 1;
if(map[x][y][z]=='#')
return 1;
if(vis[x][y][z])
return 1;
return 0;
}
int bfs(){
node a,next;
queue<node>q;
a.x=sx,a.y=sy,a.z=sz;
a.step=0;
q.push(a);
vis[sx][sy][sz]=1;
while(!q.empty()){
a=q.front();
q.pop();
if(a.x==ex&&a.y==ey&&a.z==ez)
return a.step;
for(int i=0;i<6;i++){
next.x=a.x+to[i][0];
next.y=a.y+to[i][1];
next.z=a.z+to[i][2];
if(check(next.x,next.y,next.z))
continue;
vis[next.x][next.y][next.z]=1;
next.step=a.step+1;
q.push(next);
}
}
return 0;
}
int main(){
while(scanf("%d%d%d",&k,&n,&m),n+m+k){
for(int i=0;i<k;i++){
for(int j=0;j<n;j++){
scanf("%s",map[i][j]);
for(int r=0;r<m;r++){
if(map[i][j][r]=='S'){
sx=i,sy=j,sz=r;
}else if(map[i][j][r]=='E'){
ex=i,ey=j,ez=r;
}
}
}
}
memset(vis,0,sizeof(vis));
int ans;
ans=bfs();
if(ans)
printf("Escaped in %d minute(s).\n",ans);
else
printf("Trapped!\n");
}
return 0;
}
B - Dungeon Master POJ - 2251 【bfs】
最新推荐文章于 2019-06-20 17:08:51 发布