#include<iostream>
#include<stdio.h>
#include<string.h>
#include<cstring>
#include<algorithm>
#include<stack>
#define ll long long
#define N 200000
#include<math.h>
#include<queue>
using namespace std;
int a,b,c;
int vis[30][30][30];
int linshi;
char cc;/// 用于输入字符
int s_i,s_j,s_k;/// start 坐标
int e_i,e_j,e_k;/// 终点点坐标
struct node{/// 在这里最初结构体里还有个 int step 后来怎么都mle 就改成3个了
int i,j,k;
};
node start;
node now,next;/// 在bfs循环中 中的前后两个
int chengong;/// 在循环中若为1 就跳出来 每次开始时刷新为0
queue<node>que;
int dir[6][3]={-1,0,0,1,0,0,0,1,0,0,-1,0,0,0,1,0,0,-1};
int main(){
//freopen("input2.txt","r",stdin);
while(scanf("%d%d%d",&a,&b,&c)&&a!=0&&b!=0&&c!=0){
while(!que.empty())que.pop();
chengong=0;
for(int i=0;i<a;i++){
for(int j=0;j<b;j++){
for(int k=0;k<c;k++){
cin>>cc;
if(cc=='#')vis[i][j][k]=true;
else vis[i][j][k]=false;
if(cc=='S'){
start.i=i;
start.j=j;
start.k=k;
}
else if(cc=='E'){
e_i=i;
e_j=j;
e_k=k;
}
}
}
}
vis[start.i][start.j][start.k]=1;
que.push(start);
while(!que.empty()){
now=que.front();
que.pop();
int now_i=now.i;
int now_j=now.j;
int now_k=now.k;
int step_next=vis[now_i][now_j][now_k]+1;
for(int i=0;i<6;i++){
next.i=now_i+dir[i][0];
next.j=now_j+dir[i][1];
next.k=now_k+dir[i][2];
if(next.i<0||next.j<0||next.k<0||next.i==a||next.j==b||next.k==c)continue;/// 先判断是否出界
if(vis[next.i][next.j][next.k])continue;/// 再判断是否拜访
vis[next.i][next.j][next.k]=step_next;
if(next.i==e_i&&next.j==e_j&&next.k==e_k){
printf("Escaped in %d minute(s).\n",vis[next.i][next.j][next.k]-1);
chengong=1;
}
if(chengong)break;
que.push(next);
}
if(chengong)break;
}
if(!chengong){
cout<<"Trapped!\n";
}
}
}
poj 2251
猜你喜欢
转载自blog.csdn.net/qq_40675883/article/details/82751453
今日推荐
周排行