Description
Input
Output
Escaped in x minute(s).
Trapped!
Sample Input
3 4 5 S.... .###. .##.. ###.# ##### ##### ##.## ##... ##### ##### #.### ####E 1 3 3 S## #E# ### 0 0 0
Sample Output
Escaped in 11 minute(s). Trapped!
//用DFS会TLE...
#include <iostream> #include <stdio.h> #include <string> #include <cstring> #include <cmath> #include <algorithm> #include <queue> #define N 50 #define INF 0x3f3f3f using namespace std; int dx[]={0,0,1,-1,0,0}; int dy[]={1,-1,0,0,0,0}; int dz[]={0,0,0,0,-1,1}; char ss[N][N][N]; int n,r,c; int vis[N][N][N]; int step[N][N][N]; struct Node { int x,y,z; }; Node s,e; bool flag; int bfs() { flag=0; queue<Node>q; q.push(s); vis[s.x][s.y][s.z]=1; Node f; while(!q.empty()) { f=q.front(); q.pop(); if(f.x==e.x && f.y==e.y && f.z==e.z) { flag=1; break; } int x=f.x; int y=f.y; int z=f.z; for(int i=0;i<6;i++) { int xx=x+dx[i]; int yy=y+dy[i]; int zz=z+dz[i]; if(!vis[xx][yy][zz] && xx>=0 && xx<n && yy>=0 && yy<r && zz>=0 && zz<c) { vis[xx][yy][zz]=1; f.x=xx; f.y=yy; f.z=zz; q.push(f); step[xx][yy][zz]=step[x][y][z]+1; } } } return flag; } int main() { while(~scanf("%d %d %d",&n,&r,&c)) { if(n+r+c==0) break; memset(vis,0,sizeof vis); memset(step,0,sizeof step); for(int i=0;i<n;i++) { for(int j=0;j<r;j++) { for(int k=0;k<c;k++) { cin>>ss[i][j][k]; if(ss[i][j][k]=='S') { s.x=i; s.y=j; s.z=k; } else if(ss[i][j][k]=='E') { e.x=i; e.y=j; e.z=k; } else if(ss[i][j][k]=='#') vis[i][j][k]=1; } } } if(bfs()) printf("Escaped in %d minute(s).\n",step[e.x][e.y][e.z]); else printf("Trapped!\n"); } return 0; }