这个题,就是个BFS,没有什么特殊的技巧可言。
#include<iostream>
#include<stdio.h>
#include<queue>
#include<string>
using namespace std;
int l,c,r,sum;
bool ans;
char map[33][33][33];
int vis[33][33][33];
int chx[]={1,-1,0,0,0,0};
int chy[]={0,0,1,-1,0,0};
int chz[]={0,0,0,0,1,-1};
struct node{
int x,y,z;
};
node st,en;
void bfs(){
int i,j;
queue<node>q;
q.push(st);
vis[st.x][st.y][st.z]=1;
while(!q.empty()){
sum++;
int size=q.size();
for(j=0;j<size;j++){
node p=q.front();
q.pop();
for(i=0;i<6;i++){
int x=p.x+chx[i];
int y=p.y+chy[i];
int z=p.z+chz[i];
if(!vis[x][y][z]&&(map[x][y][z]=='.'||map[x][y][z]=='E')){
if(map[x][y][z]=='E'){
ans=1;
printf("Escaped in %d minute(s).\n",sum);
return;
}
vis[x][y][z]=1;
node now;
now.x=x;
now.y=y;
now.z=z;
q.push(now);
}
}
}
}
}
int main(){
int i,j,k;
while(scanf("%d%d%d",&l,&r,&c)&&(l||r||c)){
getchar();
memset(vis,0,sizeof(vis));
memset(map,0,sizeof(map));
for(i=0;i<l;i++)
for(j=0;j<r;j++){
scanf("%s",map[i][j]);
for(k=0;k<c;k++)
if(map[i][j][k]=='S'){
st.x=i;
st.y=j;
st.z=k;
}
}
ans=sum=0;
bfs();
if(!ans)
printf("Trapped!\n");
}
return 0;
}