Source Code Problem: 2251 User: zhouxc Memory: 2388K Time: 47MS Language: G++ Result: Accepted Source Code #include "iostream" #include "queue" using namespace std; typedef struct dungeon{ char cell[100][100]; bool visit[100][100]; }; typedef struct Position{ int x; int y; int z; int step; }; dungeon level[100]; int l,r,c,s1,s2,s3,e1,e2,e3; int delta_x[6]={0,1,0,-1,0,0}; int delta_y[6]={1,0,-1,0,0,0}; int delta_z[6]={0,0,0,0,1,-1}; void Str_Bfs(dungeon level[100]) { queue<Position> q; Position temp,t,s; int flag=0; level[s3].visit[s1][s2]=true; temp.x=s1;temp.y=s2;temp.z=s3; temp.step=0; q.push(temp); while(!q.empty()) { t=q.front(); q.pop(); if(t.x==e1&&t.y==e2&&t.z==e3) { flag=1; cout<<"Escaped in "<<t.step<<" minute(s)."<<endl; break; } for(int i=0;i<6;i++) { int t1=t.x+delta_x[i]; int t2=t.y+delta_y[i]; int t3=t.z+delta_z[i]; if(!level[t3].visit[t1][t2]&&level[t3].cell[t1][t2]=='.'||level[t3].cell[t1][t2]=='E'&&t1<=r&&t1>0&&t2<=c&&t2>0&&t3>0&&t3<=l) { level[t3].visit[t1][t2]=true; s.x=t1;s.y=t2;s.z=t3; s.step=t.step+1; q.push(s); } } } if(!flag) cout<<"Trapped!"<<endl; } int main() { while(cin>>l>>r>>c&&l!=0) { dungeon level[100]; for(int i=1;i<=l;i++) { memset(level[i].visit,false,sizeof(level[i].visit)); for(int j=1;j<=r;j++) { for(int k=1;k<=c;k++) { cin>>level[i].cell[j][k]; if(level[i].cell[j][k]=='S') { s3=i;s1=j;s2=k; } if(level[i].cell[j][k]=='E') { e3=i;e1=j;e2=k; } } } } Str_Bfs(level); } }