题面
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int MAXN = 500;
const int dx[]={1,0,-1,0,0,0};
const int dy[]={0,1,0,-1,0,0};
const int dz[]={0,0,0,0,-1,1};
struct P
{
int x,y,z;
};
int x,y,z,ax,ay,az,bx,by,bz,dis[MAXN][MAXN][MAXN],ans;
bool g[MAXN][MAXN][MAXN],st[MAXN][MAXN][MAXN];
int bfs(int x,int y,int z)
{
queue<P> q;
q.push({ax,ay,az}),st[ax][ay][az]=1,dis[ax][ay][az]=1;
while (q.size())
{
P tmp=q.front();
q.pop();
if (tmp.x==bx&&tmp.y==by&&tmp.z==bz) return dis[tmp.x][tmp.y][tmp.z];
for (int i=0;i<6;i++)
{
int xx=tmp.x+dx[i],yy=tmp.y+dy[i],zz=tmp.z+dz[i];
if (xx<1||xx>::x||yy<1||yy>::y||zz<1||zz>::z||st[xx][yy][zz]||!g[xx][yy][zz]) continue;
q.push({xx,yy,zz});
st[xx][yy][zz]=1;
dis[xx][yy][zz]=dis[tmp.x][tmp.y][tmp.z]+1;
}
}
return -1;
}
int main()
{
//freopen("Input.txt","r",stdin);
//freopen("Output.txt","w",stdout);
while (cin>>z>>x>>y)
{
if (!x&&!y&&!z) break;
for (int i=1;i<=z;i++)
for (int j=1;j<=x;j++)
for (int k=1;k<=y;k++)
{
char c;
cin>>c;
if (c=='#') g[i][j][k]=1;
else if (c=='S') az=i,ax=j,ay=k;
else if (c=='E') bz=i,bx=j,by=k;
}
ans=bfs(ax,ay,az);
if (ans!=-1) printf("Escaped in %d minute(s).\n",ans);
else cout<<"Trapped!"<<endl;
}
return 0;
}