题不难,因为到现在还没设计过几次很长的代码,所以找bug才是最难得,多写了一个等于=,找了半天。
#include<iostream>
#include<vector>
#include<queue>
#include<cstring>
#include<algorithm>
using namespace std;
struct zuo{
int x;
int y;
int z;
};
vector<vector<vector<char>>> arr;
queue<zuo> que;
int l,r,c;
int st[110][110][110];
zuo fx[7]={{0,0,0},{0,0,1},{0,0,-1},{0,1,0},{0,-1,0},{1,0,0},{-1,0,0}};
void bfs(){
bool isc=false;
while(!que.empty()){
auto t=que.front();
que.pop();
for(int i=1;i<=6;i++){
int a=t.x+fx[i].x;
int b=t.y+fx[i].y;
int d=t.z+fx[i].z;
if((a>0&&a<=l)&&(b>0&&b<=r)&&(d>0&&d<=c)&&arr[a][b][d]!='#'){
que.push({a,b,d});
st[a][b][d]=st[t.x][t.y][t.z]+1;
if(arr[a][b][d]=='E'){
isc=true;
cout<<"Escaped in "<<st[a][b][d]<<" minute(s).\n";
break;
}
arr[a][b][d]='#';
}
}
if(isc){
break;
}
}
if(!isc){
cout<<"Trapped!\n";
}
return ;
}
int main(){
cin>>l>>r>>c;
while(l!=0){
arr.resize(l+1);
for(int i=1;i<=l;i++){
arr[i].resize(r+1);
for(int j=1;j<=r;j++){
arr[i][j].resize(c+1);
}
}
for(int i=1;i<=l;i++){
for(int j=1;j<=r;j++){
for(int k=1;k<=c;k++){
cin>>arr[i][j][k];
if(arr[i][j][k]=='S'){
que.push({i,j,k});
arr[i][j][k]=='#';
}
}
}
}
bfs();
while(!que.empty()){
que.pop();
}
arr.clear();
memset(st,0,sizeof(st));
cin>>l>>r>>c;
}
return 0;
}