https://vjudge.net/contest/278989#problem/A
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
using namespace std;
struct node
{
int x;
int y;
int z;
int num;
} link[40000];
int op, tp, l, m,ll, n, flag, ans;
int v[44][44][44];
char st[44][44][44];
int jk[6][3] = {{0, 1, 0}, {1, 0, 0}, {0, -1, 0}, {-1, 0, 0}, {0, 0, -1}, {0, 0, 1}};
bool Judge(int dz, int dx, int dy)
{
if(dx < 0 || dx >= m || dy < 0 || dy >= n || dz < 0 || dz >= l)
return false;
else
return true;
}
void BFS()
{
int x, y, z, i;
while(op < tp)
{
for(i = 0; i < 6; i++)
{
x = link[op].x + jk[i][0];
y = link[op].y + jk[i][1];
z = link[op].z + jk[i][2];
if(Judge(z, x, y) && v[z][x][y] == 0)
{
if(st[z][x][y] == '.')
{
v[z][x][y] = 1;
link[tp].x = x;
link[tp].y = y;
link[tp].z = z;
link[tp].num = link[op].num + 1;
tp++;
}
else if(st[z][x][y] == 'E')
{
v[z][x][y] = 1;
flag = 1;
ans = link[op].num + 1;
break;
}
}
}
if(flag)
break;
op++;
}
}
int main()
{
int i, j, k;
while(scanf("%d %d %d", &l, &m, &n) && (l != 0 || n != 0 || m != 0))
{
op = tp = flag = 0;
memset(v, 0, sizeof(v));
for(i = 0; i < 40000; i++)
link[i].num = 0;
for(i = 0; i < l; i++)
for(j = 0; j < m; j++)
scanf("%s", st[i][j]);
for(i = 0; i < l; i++)
for(j = 0; j < m; j++)
for(k = 0; k < n; k++)
if(st[i][j][k] == 'S'){
link[tp].x = j;
link[tp].y = k;
link[tp].z = i;
tp++;
v[i][j][k] = 1;
ll=1;
break;
}
BFS();
if(flag)
printf("Escaped in %d minute(s).\n", ans);
else
printf("Trapped!\n");
}
return 0;
}