入门广搜,无WA点无坑点。
#include <cstdio>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <algorithm>
#include <iostream>
#include <queue>
using namespace std;
const int inf = 100000000;
struct point{
int x;
int y;
int z;
};
typedef point P;
char arr[40][40][40];
int sx, sy, sz, gx, gy, gz;
int dir[6][3] = {{1, 0, 0}, {0, 1, 0}, {-1, 0, 0}, {0, -1, 0}, {0, 0, 1}, {0, 0, -1}};
int vis[40][40][40], l, r, c, flag;
void bfs(){
queue<P> que;
P tmp1, tmp2;
int i, j, k, dx, dy, dz;
for(i = 0; i < l; i++){
for(j = 0; j < r; j++){
for(k = 0; k < c; k++){
vis[i][j][k] = inf;
}
}
}
vis[sx][sy][sz] = 0;
tmp1.x = sx, tmp1.y = sy, tmp1.z = sz;
que.push(tmp1);
while(!que.empty()){
tmp2 = que.front();
que.pop();
if(tmp2.x == gx && tmp2.y == gy && tmp2.z == gz){
flag = 1;
break;
}
for(i = 0; i < 6; i++){
dx = tmp2.x + dir[i][0];
dy = tmp2.y + dir[i][1];
dz = tmp2.z + dir[i][2];
if(0 <= dx && dx < l && 0 <= dy && dy < r && 0 <= dz && dz < c && arr[dx][dy][dz] != '#' && vis[dx][dy][dz] == inf){
tmp1.x = dx, tmp1.y = dy, tmp1.z = dz;
que.push(tmp1);
vis[dx][dy][dz] = vis[tmp2.x][tmp2.y][tmp2.z] + 1;
}
}
}
return ;
}
int main(){
int i, j, k;
while(scanf("%d %d %d", &l, &r, &c) != EOF){
if(l == 0 && r == 0 && c == 0){
break;
}
flag = 0;
memset(arr, 0, sizeof(arr));
for(i = 0; i < l; i++){
getchar();
for(j = 0; j < r; j++){
for(k = 0; k < c; k++){
scanf("%c", &arr[i][j][k]);
}
getchar();
}
}
for(i = 0; i < l; i++){
for(j = 0; j < r; j++){
for(k = 0; k < c; k++){
if(arr[i][j][k] == 'S'){
sx = i, sy = j, sz = k;
}
if(arr[i][j][k] == 'E'){
gx = i, gy = j, gz = k;
}
}
}
}
bfs();
if(vis[gx][gy][gz] == inf){
printf("Trapped!\n");
}
else{
printf("Escaped in %d minute(s).\n", vis[gx][gy][gz]);
}
}
return 0;
}