原题:棋盘问题。
#include<iostream>
#include<cstring>
#include<queue>
using namespace std;
const int N=110;
char g[N][N][N];
int dist[N][N][N];
int n,m,d;
struct Node{
int x,y,z;
};
Node start,ends1;
int dx[6]={0,0,1,-1,0,0},dy[6]={1,-1,0,0,0,0},dz[6]={0,0,0,0,1,-1};
void bfs()
{
queue<Node> q;
q.push(start);
memset(dist,0x3f,sizeof dist);
dist[start.x][start.y][start.z]=0;
while(q.size())
{
Node t=q.front();
q.pop();
if(t.x==ends1.x&&t.y==ends1.y&&t.z==ends1.z) return;
for(int u=0;u<6;u++)
{
int x=t.x+dx[u],y=t.y+dy[u],z=t.z+dz[u];
if(x>=0&&x<n&&y>=0&&y<m&&z>=0&&z<d&&g[x][y][z]!='#')
{
if(dist[x][y][z]>dist[t.x][t.y][t.z]+1)
{
dist[x][y][z]=dist[t.x][t.y][t.z]+1;
q.push( {x,y,z} );
}
}
}
}
}
int main()
{
while(cin>>n>>m>>d,n||m||d)
{
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
cin>>g[i][j];
for(int k=0;k<d;k++)
{
if(g[i][j][k]=='S') start={i,j,k};
else if(g[i][j][k]=='E') ends1={i,j,k};
}
}
}
bfs();
int ans=dist[ends1.x][ends1.y][ends1.z];
if(ans==0x3f3f3f3f) puts("Trapped!");
else printf("Escaped in %d minute(s).\n",ans);
}
return 0;
}