| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 
 | #include <cstdio>#include <cstring>
 #include <algorithm>
 #include <iostream>
 #include <queue>
 
 using namespace std;
 const int N = 110;
 
 int dx[] = {0, 0, 1, -1, 0, 0};
 int dy[] = {0, 0, 0, 0, -1, 1};
 int dz[] = {1, -1,0, 0, 0, 0};
 
 struct Node
 {
 int x, y, z;
 }st, ed;
 int l, r, c;
 char g[N][N][N];
 int d[N][N][N];
 bool vis[N][N][N];
 
 bool check(int x, int y, int z)
 {
 if(x <= 0 || x > r) return false;
 if(y <= 0 || y > c) return false;
 if(z <= 0 || z > l) return false;
 if(d[x][y][z] != -1) return false;
 if(g[z][x][y] == '#') return false;
 
 return true;
 }
 
 void bfs()
 {
 queue<Node> q;
 q.push(st);
 d[st.x][st.y][st.z] = 0;
 
 while(q.size())
 {
 auto t = q.front(); q.pop();
 int x = t.x, y = t.y, z = t.z;
 for(int i = 0;i < 6;i ++)
 {
 int nx = x + dx[i];
 int ny = y + dy[i];
 int nz = z + dz[i];
 if(check(nx, ny, nz))
 {
 q.push({nx, ny, nz});
 d[nx][ny][nz] = d[x][y][z] + 1;
 }
 }
 }
 }
 
 int main()
 {
 while(cin >> l >> r >> c && l != 0)
 {
 for(int i = 1;i <= l;i ++)
 for(int j = 1;j <= r;j ++)
 for(int k = 1;k <= c; k ++)
 {
 cin >> g[i][j][k];
 if(g[i][j][k] == 'S')
 {
 st.z = i,st.x = j, st.y = k;
 }
 if(g[i][j][k] == 'E')
 {
 ed.z = i, ed.x = j, ed.y = k;
 }
 }
 memset(d, -1, sizeof d);
 bfs();
 int ans = d[ed.x][ed.y][ed.z];
 if(ans == -1) puts("Trapped!");
 else printf("Escaped in %d minute(s).\n", ans);
 
 
 }
 
 return 0;
 }
 
 |