这道题目真心不难,只是最简单的bfs,这个迷宫是放在3维空间里的,走迷宫时只需多加两个方向。
思路是找到迷宫入口,开始bfs,找到出口就记录最少步数,没找到就输出Trapped。
Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 15409 | Accepted: 5960 |
Description
Input
Output
Escaped 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<stdio.h> #include<string.h> int l,r,c,ans,vis[35][35][35]; char mat[35][35][35]; int dh[6]={1,-1,0,0,0,0}; int dx[6]={0,0,0,0,1,-1}; int dy[6]={0,0,-1,1,0,0}; struct C { int h,x,y,step; }q[10010]; int bfs(int h,int x,int y) { int front=0,rear=0; q[rear].h=h; q[rear].x=x; q[rear].y=y; q[rear++].step=0; vis[h][x][y]=1; while(front<rear) { for(int i=0;i<6;i++) { int nh=q[front].h+dh[i]; int nx=q[front].x+dx[i]; int ny=q[front].y+dy[i]; if(!vis[nh][nx][ny] && mat[nh][nx][ny]!=‘#‘) { vis[nh][nx][ny]=1; q[rear].h=nh; q[rear].x=nx; q[rear].y=ny; q[rear].step=q[front].step+1; if(mat[nh][nx][ny] == ‘E‘) { ans=q[rear].step; return 1; } rear++; } } front++; } return 0; } int main() { while(~scanf("%d %d %d%*c",&l,&r,&c) && l+r+c) { memset(mat,‘#‘,sizeof(mat)); memset(vis,0,sizeof(vis)); int i,j,k,ok=0; for(i=1;i<=l;i++) { for(j=1;j<=r;j++) { for(k=1;k<=c;k++) scanf("%c",&mat[i][j][k]); getchar(); } getchar(); } for(i=1;i<=l;i++) { for(j=1;j<=r;j++) { for(k=1;k<=c;k++) if(mat[i][j][k]==‘S‘) { ok=1; break; } if(ok) break; } if(ok) break; } ans=0; if(bfs(i,j,k)) printf("Escaped in %d minute(s).\n",ans); else printf("Trapped!\n"); } return 0; }
POJ 2251 Dungeon Master,布布扣,bubuko.com
原文:http://blog.csdn.net/u013923947/article/details/21875871