1 //纯bfs
2 #include <iostream>
3 #include <algorithm>
4 #include <cstring>
5 #include <cstdio>
6 #include <queue>
7
8 using namespace std;
9 const int maxn = 33;
10 char g[maxn][maxn][maxn];
11 bool vis[maxn][maxn][maxn];
12 int f[6][3] = { { 1, 0, 0 }, { -1, 0, 0 }, { 0, 1, 0 }, { 0, -1, 0 }, { 0, 0, 1 }, { 0, 0, -1 } };
13 int L, R, C;
14 struct node{
15 int x, y, z;
16 int flag;
17 }last, now;
18
19 void bfs(int x1, int y1, int z1){
20 vis[z1][x1][y1] = true;
21 queue<node>q;
22 while (!q.empty()){
23 q.pop();
24 }
25 last.x = x1; last.y = y1; last.z = z1;
26 last.flag = 0;
27 q.push(last);
28 while (!q.empty()){
29 last = q.front();
30 q.pop();
31 if (g[last.z][last.x][last.y] == 'E'){
32 cout << "Escaped in " << last.flag << " minute(s)." << endl;
33 return;
34 }
35 for (int i = 0; i < 6; i++){
36 now.z = last.z + f[i][0];
37 now.x = last.x + f[i][1];
38 now.y = last.y + f[i][2];
39 now.flag = last.flag + 1;
40 if (now.z < 0 || now.z >= L || now.x < 0 || now.y < 0 || now.x >= R || now.y >= C)
41 continue;
42 if (!vis[now.z][now.x][now.y] && g[now.z][now.x][now.y] != '#'){
43 vis[now.z][now.x][now.y] = true;
44 q.push(now);
45 }
46 }
47 }
48 cout << "Trapped!" << endl;
49 }
50
51 int main(){
52 ios::sync_with_stdio(false);
53 while (cin>>L>>R>>C){
54 if (!L && !R && !C)
55 break;
56 int x, y, z;
57 memset(vis, false, sizeof(vis));
58 for (int i = 0; i < L; i++){
59 for (int j = 0; j < R; j++){
60 for (int k = 0; k < C; k++){
61 char s;
62 cin >> s;
63 g[i][j][k] = s;
64 if (s == 'S'){
65 z = i; x = j; y = k;
66 }
67 }
68 }
69 }
70 bfs(x, y, z);
71
72 }
73 return 0;
74 }