/************************************************************************* File Name: poj2251two.cpp Author: yubo Mail: [email protected] Created Time: 2014年05月30日 星期五 05時11分28秒 學習重點:三維迷宮,重點是那個queue的應用,自己學了不少東西!加油! 3 4 5 S.... .###. .##.. ###.# ##### ##### ##.## ##... ##### ##### #.### ####E 1 3 3 S## #E# ### 0 0 0 ************************************************************************/ #include#include #include #include using namespace std; int L,R,C; int S_x,S_y,S_z; char maze[40][40][40];//標記地圖 int dir[6][3]={ -1,0,0,1,0,0,0,1,0,0,-1,0,0,0,1,0,0,-1, };//三維方向的數組,仔細想一想 int vis[40][40][40]; typedef struct{ int x,y,z; int depth;// }SE; int judge(int x,int y,int z)//自己寫的 { if(x>=0 && x =0 && y =0 && z q; SE q0,q1,q2; q0.x=i; q0.y=j; q0.z=k; q0.depth=0; q.push(q0); while(!q.empty()){ q1=q.front();//讀取第一個元素要及時拋棄 q.pop(); for(int i=0;i<6;i++){ int tmp1=q1.x+dir[i][0]; int tmp2=q1.y+dir[i][1]; int tmp3=q1.z+dir[i][2]; if(judge(tmp1,tmp2,tmp3) && !vis[tmp1][tmp2][tmp3] && maze[tmp1][tmp2][tmp3]!='#') { if(maze[tmp1][tmp2][tmp3]=='E'){ ans=q1.depth+1; return ; } q2.x=tmp1; q2.y=tmp2; q2.z=tmp3; q2.depth=q1.depth+1; vis[tmp1][tmp2][tmp3]=1; q.push(q2); } } } } int main() { freopen("in.txt","r",stdin); char tmp; while(scanf("%d%d%d",&L,&R,&C)){ if(!L&&!R&&!C) break; memset(vis,0,sizeof(vis)); for(int i=0;i >maze[i][j][k]; if(maze[i][j][k]=='S'){ S_x=i; S_y=j; S_z=k; } } ans=-1; bfs(S_x,S_y,S_z); if(ans!=-1)//這裡貌似有陷阱 printf("Escaped in %d minute(s).\n",ans); else printf("Trapped!\n"); } }