#include <cstring>
#include <cstdlib>
#include <algorithm>
#include <iostream>
#include <cmath>
#include <vector>
#include <map>
#include <stack>
#include <queue>
#include <cstdio>
using namespace std;
typedef long long ll;
const int INF=0x3f3f3f3f;
const int N=210;
const int mod=1000;
//int dx[]={2,2,-2,-2,1,1,-1,-1};
//int dy[]={1,-1,1,-1,2,-2,2,-2};
int dx[]={1,-1,0,0,0,0};
int dy[]={0,0,1,-1,0,0};
int dz[]={0,0,0,0,1,-1};
int l,r,c;
char a[N][N][N];
bool vis[N][N][N];
int sx,sy,sz;
struct Node{
int x,y,z,level;
}start,now,nxt;
int bfs(int x,int y,int z){
memset(vis,0,sizeof(vis));
start.x=x,start.y=y,start.z=z,start.level=0;
vis[x][y][z]=1;
queue<Node> q;
q.push(start);
while(!q.empty()){
now=q.front();
q.pop();
if(a[now.x][now.y][now.z]=='E') return now.level;
for(int i=0;i<6;i++){
int nx=now.x+dx[i];
int ny=now.y+dy[i];
int nz=now.z+dz[i];
if(nx>=0&&nx<l&&ny>=0&&ny<r&&nz>=0&&nz<c&&!vis[nx][ny][nz]&&a[nx][ny][nz]!='#'){
nxt.x=nx,nxt.y=ny,nxt.z=nz,nxt.level=now.level+1;
vis[nx][ny][nz]=1;
q.push(nxt);
}
}
}
return -1;
}
int main(){
while(cin>>l>>r>>c&&(l&&r&&c)){
for(int i=0;i<l;i++){
for(int j=0;j<r;j++){
for(int k=0;k<c;k++){
cin>>a[i][j][k];
}
}
}
for(int i=0;i<l;i++){
for(int j=0;j<r;j++){
for(int k=0;k<c;k++){
if(a[i][j][k]=='S'){
sx=i,sy=j,sz=k;
}
}
}
}
int ans=bfs(sx,sy,sz);
if(ans==-1) cout<<"Trapped!"<<endl;
else printf("Escaped in %d minute(s).\n",ans);
}
}
Dungeon Master
最新推荐文章于 2023-03-22 21:36:10 发布