题目:1096. 地牢大师
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef pair<int,int >PII;
const int N=1e5+10;
const int mod=100000007;
char a[105][105][105];
bool sta[105][105][105];
int l,r,c;
typedef struct Node{
int x,y,z;
int bc;
}node;
int fx[8]={0,0,1,-1,0,0};
int fy[8]={1,-1,0,0,0,0};
int fz[8]={0,0,0,0,1,-1};
int main(){
while(cin>>l>>r>>c){
node s,e;
memset(sta,0,sizeof sta);
if(l==0&&r==0&&c==0) break;
for(int i=1;i<=l;i++){
for(int j=1;j<=r;j++){
for(int k=1;k<=c;k++){
cin>>a[i][j][k];
if(a[i][j][k]=='S'){
s.x=j,s.y=k;
s.z=i,s.bc=0;
}
if(a[i][j][k]=='E'){
e.x=j,e.y=k;
e.z=i;
}
}
}
}
queue<node> q;
q.push(s);
bool flag=0;
int ct=0;
while(q.size()){
node t=q.front();
//q.pop();
sta[t.z][t.x][t.y]=1;
if(t.z==e.z&&t.x==e.x&&t.y==e.y){
ct=t.bc;
flag=1;
break;
}
q.pop();
for(int i=0;i<6;i++){
int x=t.x,y=t.y,z=t.z;
x+=fx[i],y+=fy[i],z+=fz[i];
if(x>=1&&x<=r&&y>=1&&y<=c&&z>=1&&z<=l){
if(!sta[z][x][y]&&a[z][x][y]!='#'){
node tmp;
tmp.x=x,tmp.y=y,tmp.z=z,tmp.bc=t.bc+1;
sta[z][x][y]=1;//忘记加这个了,导致内存不够
q.push(tmp);
}
}
}
}
if(flag){
printf("Escaped in %d minute(s).\n",ct);
}else{
cout<<"Trapped!"<<endl;
}
}
return 0;
}