三维的BFS。
有两处错了:
1.没有清空队列
2.没有判断数组越界
3.变量名字相同
导致WA了和RE了几次。
#include<cstdlib>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<queue>
using namespace std;
bool view[30][30][30];
int mp[30][30][30];
int l,r,c;
int dir[6][3]={{0,0,-1},{0,-1,0},{0,0,1},{0,1,0},{1,0,0},{-1,0,0}};
struct pos{
int l,r,c,ct;
pos(int la,int ro,int co,int cnt):l(la),r(ro),c(co),ct(cnt){}
};
queue<pos> q;
bool init(){
while(!q.empty()) q.pop();
memset(mp,0,sizeof(mp));
memset(view,false,sizeof(view));
cin>>l>>r>>c;
if(l==0&&r==0&&c==0) return false;
for(int i=0;i<l;i++){
for(int j=0;j<r;j++){
for(int k=0;k<c;k++){
char a;
cin>>a;
if(a=='S'){
q.push(pos(i,j,k,0));
}
else if(a=='.'){
mp[i][j][k]=1;
}
else if(a=='E'){
mp[i][j][k]=2;
}
}
}
}
return true;
}
int bfs(){
while(!q.empty()){
pos u=q.front();
q.pop();
int la=u.l,row=u.r,col=u.c,cTT=u.ct;
if(mp[la][row][col]==2){
return cTT;
}
for(int i=0;i<6;i++){
int tla=la+dir[i][0];
int trow=row+dir[i][1];
int tcol=col+dir[i][2];
if(tla<0||tla>=l||trow<0||trow>=r||tcol<0||tcol>=c)
continue;
if(view[tla][trow][tcol])
continue;
if(mp[tla][trow][tcol]){
view[tla][trow][tcol]=true;
q.push(pos(tla,trow,tcol,cTT+1));
}
}
}
return 0;
}
int main(void){
while(init()){
int c=bfs();
if(!c){
printf("Trapped!\n");
}
else{
printf("Escaped in %d minute(s).\n",c);
}
}
return 0;
}