uva UVa 532
#include <iostream>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <cstdio>
#include <cstdlib>
using namespace std;
char maze[33][33][33];
int vis[33][33][33];
int l, r, c, t, mint;
int move[7][3]={{0,0,1},{0,0,-1},{0,1,0},{0,-1,0},{1,0,0},{-1,0,0}};
void dfs(int x, int y, int z)
{
if(maze[x][y][z] == '#')
return;
if(maze[x][y][z] == 'E')
if(t<mint) { mint = t; return;}
for(int i = 0; i < 6; i++)
{
int px = x+move[i][0];
int py = y+move[i][1];
int pz = z+move[i][2];
if(!vis[px][py][pz] && px>=0 && px<l && py>=0 && py<r && pz>=0 && pz<c)
{
t++;
vis[px][py][pz] = 1;
dfs(px, py, pz);
vis[px][py][pz] = 0;
t--;
}
}
return;
}
int main()
{
while(cin >> l >> r >> c, l+r+c)
{
getchar();
for(int i = 0; i < l; i++)
{
for(int j = 0; j < r; j++)
scanf("%s", maze[i][j]);
}
memset(vis, 0, sizeof(vis));
mint = 30000;t = 0;
for(int i = 0; i < l; i++)
for(int j = 0; j < r; j++)
for(int k = 0; k < c; k++)
if(maze[i][j][k] == 'S')
dfs(i, j, k);
if(mint == 30000) cout << "Trapped!" << endl;
else printf("Escaped in %d minute(s).\n", mint);
}
return 0;
}
//vis应该放后边吧。。应该先判断是否越界再访问vis吧。。否则可能越界的。。
if(px>=0 && px<l && py>=0 && py<r && pz>=0 && pz<c && !vis[px][py][pz])