三维简单搜索
结果为1时输出去掉s
//
// Created by xingchaoyue on 2019/5/10.
//
#include<iostream>
#include<cstdio>
#include<queue>
#include<string.h>
using namespace std;
int n,m,k;
char mp[50][50][50];
int stk,stn,stm;
int edk,edn,edm;
int ans = -1;
struct node{
int i,j,h;
int tim;
node(int _i,int _j,int _h,int _tim):i(_i),j(_j),h(_h),tim(_tim){}
};
queue<node>q;
int dir[4][2]={{-1,0},{1,0},{0,-1},{0,1}};
int vis[50][50][50];
void bfs(){
vis[stk][stn][stm]=1;
node temp(stk,stn,stm,0);
q.push(temp);
while(!q.empty()){
node te = q.front();
q.pop();
int i = te.i;
int j = te.j;
int h = te.h;
int tim = te.tim;
// cout<<i<<":"<<j<<":"<<h<<":"<<tim<<endl;
if(i==edk&&j==edn&&h==edm){
ans = tim;
break;
}
for(int i1 =0;i1<6;++i1){
int xi,xj,xh;
if(i1<=3){
xi = i;
xj = j+dir[i1][0];
xh = h+dir[i1][1];
}
else if(i1==4){
xi = i-1;
xj = j;
xh = h;
}
else{
xi = i+1;
xj = j;
xh = h;
}
if(xj<0||xj>=n||xh<0||xh>=m||xi<0||xi>=k)continue;
// cout<<xi<<xj<<xh<<endl;
//cout<<i1<<":"<<mp[xi][xj][xh]<<endl;
if(mp[xi][xj][xh]!='#'&&!vis[xi][xj][xh]){
vis[xi][xj][xh]=1;
node te1(xi,xj,xh,tim+1);
q.push(te1);
}
}
}
while(!q.empty())q.pop();
}
void out(){
for(int i= 0;i<k;++i){
for(int j = 0;j<n;++j){
for(int h = 0;h<m;++h){
cout<<mp[i][j][h];
}
cout<<endl;
}
cout<<endl;
}
}
int main(){
while(~scanf("%d%d%d",&k,&n,&m)&&n!=0){
memset(vis,0,sizeof(vis));
ans = -1;
for(int i =0;i<k;++i){
for(int j = 0;j<n;++j){
scanf("%s",mp[i][j]);
}
getchar();
}
int cnt = 0;
for(int i =0;i<k;++i){
for(int j =0;j<n;++j){
for(int h = 0;h<m;++h){
cnt++;
if(mp[i][j][h]=='S'){
stk = i;
stn = j;
stm = h;
}
if(mp[i][j][h]=='E'){
edk = i;
edn = j;
edm = h;
}
}
}
}
//out();
//cout<<cnt<<endl;
bfs();
if(ans==-1){
cout<<"Trapped!"<<endl;
}
else{
if(ans==1){
cout<<"Escaped in "<<ans<<" minute."<<endl;
}
else
cout<<"Escaped in "<<ans<<" minute(s)."<<endl;
}
}
}