Description
Is an escape possible? If yes, how long will it take?
Input
The input consists of a number of dungeons. Each dungeon description starts with a line containing three integers L, R and C (all limited to 30 in size).
L is the number of levels making up the dungeon.
R and C are the number of rows and columns making up the plan of each level.
Then there will follow L blocks of R lines each containing C characters. Each character describes one cell of the dungeon. A cell full of rock is indicated by a '#' and empty cells are represented by a '.'. Your starting position is indicated by 'S' and the exit by the letter 'E'. There's a single blank line after each level. Input is terminated by three zeroes for L, R and C.
Output
Each maze generates one line of output. If it is possible to reach the exit, print a line of the form
Escaped in x minute(s).
where x is replaced by the shortest time it takes to escape.
If it is not possible to escape, print the line
Trapped!
Sample Input
3 4 5
S....
.###.
.##..
###.#
#####
#####
##.##
##...
#####
#####
#.###
####E
1 3 3
S##
#E#
###
0 0 0
Sample Output
Escaped in 11 minute(s).
Trapped!
Input
The input consists of a number of dungeons. Each dungeon description starts with a line containing three integers L, R and C (all limited to 30 in size).
L is the number of levels making up the dungeon.
R and C are the number of rows and columns making up the plan of each level.
Then there will follow L blocks of R lines each containing C characters. Each character describes one cell of the dungeon. A cell full of rock is indicated by a '#' and empty cells are represented by a '.'. Your starting position is indicated by 'S' and the exit by the letter 'E'. There's a single blank line after each level. Input is terminated by three zeroes for L, R and C.
Output
Each maze generates one line of output. If it is possible to reach the exit, print a line of the form
Escaped in x minute(s).
where x is replaced by the shortest time it takes to escape.
If it is not possible to escape, print the line
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<cstdio>
#include<cstring>
#include<queue>
using namespace std;
const int dir[6][3]={{0,-1,0},{0,1,0},{0,0,-1},{0,0,1},{1,0,0},{-1,0,0}};
struct node{int x,y,z,step;};
char matrix[31][31][31];
bool used[31][31][31];
int n;
int startx,starty,startz,endx,endy,endz;
int l,r,c;
node cur,pre;
int bfs()
{
int i,x,y,z;
queue<node>que;
cur.x=startx,cur.y=starty,cur.z=startz,cur.step=0;
memset(used,0,sizeof(used));
used[startx][starty][startz]=1;
que.push(cur);
while(!que.empty())
{
cur=que.front(),que.pop();
if(cur.x==endx&&cur.y==endy&&cur.z==endz)
return cur.step;
for(i=0;i<6;i++)
{
x=cur.x+dir[i][0];
y=cur.y+dir[i][1];
z=cur.z+dir[i][2];
if(x>=0&&x<l&&y>=0&&y<r&&z>=0&&z<=c&&!used[x][y][z]&&matrix[x][y][z]!='#')
{
used[x][y][z]=1;
pre.x=x,pre.y=y,pre.z=z,pre.step=cur.step+1;
que.push(pre);
}
}
}
return -1;
}
int main()
{
int i,j,k,ans;
while(scanf("%d%d%d",&l,&r,&c),l||r||c)
{
getchar();
for(i=0;i<l;i++)
{
for(j=0;j<r;j++)
{
for(k=0;k<c;k++)
{
scanf("%c",&matrix[i][j][k]);
if(matrix[i][j][k]=='S')
{
startx=i,starty=j,startz=k;
}
else if(matrix[i][j][k]=='E')
{
endx=i,endy=j,endz=k;
}
}
getchar();
}
getchar();
}
ans=bfs();
if(ans==-1)
printf("Trapped!\n");
else printf("Escaped in %d minute(s).\n",ans);
}
return 0;
}