Description
You are trapped in a 3D dungeon and need to find the quickest way out! The dungeon is composed of unit cubes which may or may not be filled with rock. It takes one minute to move one unit north, south, east, west, up or down. You cannot move diagonally and the maze is surrounded by solid rock on all sides.Input
The input consists of a number of dungeons. Each dungeon description starts with a line containing three integers L, R and C (all limited to 30 in size).Output
Each maze generates one line of output. If it is possible to reach the exit, print a line of the formEscaped in x minute(s).
Trapped!
Sample Input
3 4 5 S.... .###. .##.. ###.# ##### ##### ##.## ##... ##### ##### #.### ####E 1 3 3 S## #E# ### 0 0 0
Sample Output
Escaped in 11 minute(s). Trapped!
作為一個弱菜,被這道題卡了一天了。
三維廣搜,六個方向,上下左右前後。
第一個案例可以理解為三個三層疊在一起的。
#include#include #include #include #include using namespace std; #define M 45 #define inf 0x6ffffff char map[M][M][M]; int vis[M][M][M]; int dir[6][3]={{0,1,0},{0,-1,0},{1,0,0},{-1,0,0},{0,0,1},{0,0,-1}};//六個方向 int n,m,ok,k; struct node { int x,y,z; int time; } ; node f[666]; int ztime; int z2,x2,y2,z1,x1,y1; void bfs() { int i; queue q; node st,ed; st.x=x1; st.y=y1; st.z=z1; st.time=0; q.push(st); while(!q.empty()) { st=q.front(); q.pop(); if(st.x==x2 &&st.y==y2 &&st.z==z2) { ok=1; ztime=st.time; return; } for(i=0;i<6;i++) { ed.x=st.x+dir[i][0]; ed.y=st.y+dir[i][1]; ed.z=st.z+dir[i][2]; if(map[ed.x][ed.y][ed.z]=='#' ||vis[ed.x][ed.y][ed.z] ||ed.x<0 ||ed.x>=k ||ed.y<0 ||ed.y>=n ||ed.z<0||ed.z>=m)//越界,搜過的地方,牆全部排除 continue; ed.time=st.time+1; //時間加一 vis[ed.x][ed.y][ed.z]=1; q.push(ed); } } return; } int main() { int i,j,r; while(scanf("%d%d%d",&k,&n,&m)!=EOF &&k!=0 &&n!=0 &&m!=0) { ok=0; memset(vis,0,sizeof(vis)); for(i=0;i