Description
Input
Output
Escaped in x minute(s).
Trapped!
Sample Input
3 4 5 S.... .###. .##.. ###.# ##### ##### ##.## ##... ##### ##### #.### ####E 1 3 3 S## #E# ### 0 0 0
Sample Output
Escaped in 11 minute(s). Trapped!
#include<stdio.h> #include<queue> #include<cstring> using namespace std; int l,r,c,x1,x2,y1,y2,z1,z2; char map[35][35][35]; int visit[35][35][35]; int dir[6][3]= {{0,0,1},{0,1,0},{1,0,0},{0,0,-1},{0,-1,0},{-1,0,0}}; struct node { int x,y,z,time; }; int bound(int x,int y,int z) { if(x<0||y<0||z<0||x>=l||y>=r||z>=c) return 1; else if(map[x][y][z]=='#') return 1; else if(visit[x][y][z]) return 1; return 0; } int bfs() { queue<node>q; node t,next; t.x=x1; t.y=y1; t.z=z1; t.time=0; visit[t.x][t.y][t.z]=1; q.push(t); while(!q.empty()) { t=q.front(); q.pop(); if(t.x==x2&&t.y==y2&&t.z==z2) return t.time; for(int i=0; i<6; i++) { next=t; next.x+=dir[i][0]; next.y+=dir[i][1]; next.z+=dir[i][2]; if(bound(next.x,next.y,next.z)) continue; visit[next.x][next.y][next.z]=1; next.time=t.time+1; q.push(next); } } return 0; } int main() { while(scanf("%d%d%d",&l,&r,&c)!=EOF) { if(l==0&&r==0&&c==0) break; for(int i=0; i<l; i++) { for(int j=0; j<r; j++) {scanf("%s",map[i][j]); for(int k=0; k<c; k++) { if(map[i][j][k]=='S') { x1=i; y1=j; z1=k; } else if(map[i][j][k]=='E') { x2=i; y2=j; z2=k; } } } } memset(visit,0,sizeof(visit)); int z; z=bfs(); if(z) printf("Escaped in %d minute(s).\n",z); else printf("Trapped!\n"); } return 0; }