L 層、R 行、C 列的三維迷宮,'S' 起點、'E' 終點、'#' 牆壁、'.' 通路。求最短逃脫時間(每步 1 分鐘),不可達輸出 "Trapped!"。
#include
#include
#include
#include
using namespace std;
int L, R, C, Sx, Sy, Sz;
char maze[40][40][40];
int dir[6][3] = {{-1,0,0},{1,0,0},{0,1,0},{0,-1,0},{0,0,1},{0,0,-1}};
int vis[40][40][40];
struct Node { int x, y, z, d; };
bool valid(int x, int y, int z) {
return x>=0 && x=0 && y=0 && z q;
memset(vis, 0, sizeof(vis));
q.push({sx, sy, sz, 0});
vis[sx][sy][sz] = 1;
while (!q.empty()) {
Node cur = q.front(); q.pop();
for (int i = 0; i < 6; i++) {
int nx = cur.x + dir[i][0];
int ny = cur.y + dir[i][1];
int nz = cur.z + dir[i][2];
if (valid(nx, ny, nz) && !vis[nx][ny][nz] && maze[nx][ny][nz] != '#') {
if (maze[nx][ny][nz] == 'E') return cur.d + 1;
vis[nx][ny][nz] = 1;
q.push({nx, ny, nz, cur.d + 1});
}
}
}
return -1;
}
int main() {
while (scanf("%d%d%d", &L, &R, &C), L||R||C) {
memset(vis, 0, sizeof(vis));
for (int i = 0; i < L; i++)
for (int j = 0; j < R; j++)
for (int k = 0; k < C; k++) {
cin >> maze[i][j][k];
if (maze[i][j][k] == 'S') { Sx=i; Sy=j; Sz=k; }
}
int ans = bfs(Sx, Sy, Sz);
if (ans != -1) printf("Escaped in %d minute(s).\n", ans);
else printf("Trapped!\n");
}
return 0;
}