POJ-2251-Dungeon Master
2013-02-17 13:35
253 查看
这个题仍然属于一个BFS的题,尽管书中说用DFS作,但我仍觉得BFS比较好做。
大意是说给你一个三维的迷宫,第一个代表第一层,第二个代表第二层,第三个代表第三层,问从起点(S)到终点(E)最快需要走多少步。
我的处理方法呢,人为设置第0层和第四层,即为第1层的上一层和第3层的下一层,然后再人为给每一层加一个'#'的围栏,这样也就是说我们在后面不需要处理相应的边界问题。
处理好以后就比较简单了,跟以往一样,直接上代码。
大意是说给你一个三维的迷宫,第一个代表第一层,第二个代表第二层,第三个代表第三层,问从起点(S)到终点(E)最快需要走多少步。
我的处理方法呢,人为设置第0层和第四层,即为第1层的上一层和第3层的下一层,然后再人为给每一层加一个'#'的围栏,这样也就是说我们在后面不需要处理相应的边界问题。
处理好以后就比较简单了,跟以往一样,直接上代码。
#include<cstdio> #include<cstring> #include<iostream> #include<queue> #define MAX 33 using namespace std; int l,r,c,map[MAX][MAX][MAX],use[MAX][MAX][MAX]; int sx,sy,sz,ex,ey,ez,movex[6]={1,-1,0,0,0,0},movey[6]={0,0,1,-1,0,0},movez[6]={0,0,0,0,1,-1}; int main() { while(scanf("%d%d%d",&l,&r,&c)!=EOF) { if(l+r+c==0) break; memset(use,0,sizeof(use)); for(int i=0;i<=r+1;i++) for(int j=0;j<=c+1;j++) map[0][i][j]=map[l+1][i][j]='#'; for(int i=1;i<=l;i++) { for(int j=0;j<=r+1;j++) map[i][j][0]=map[i][j][c+1]='#'; for(int j=0;j<=c+1;j++) map[i][0][j]=map[i][r+1][j]='#'; for(int j=1;j<=r;j++) { getchar(); for(int k=1;k<=c;k++) { scanf("%c",&map[i][j][k]); if(map[i][j][k]=='S') sx=j,sy=k,sz=i; else if(map[i][j][k]=='E') ex=j,ey=k,ez=i; } } getchar(); } queue<int> x,y,z; x.push(sx); y.push(sy); z.push(sz); use[sz][sx][sy]=1; int flag=0,ans=0,lastcou=1,nxtcou=0,cou=0; while(!x.empty()) { int itx=x.front(); x.pop(); int ity=y.front(); y.pop(); int itz=z.front(); z.pop(); for(int i=0;i<6;i++) { int xx=itx+movex[i]; int yy=ity+movey[i]; int zz=itz+movez[i]; if(map[zz][xx][yy]=='#'||use[zz][xx][yy]) continue; if(xx==ex&&yy==ey&&zz==ez) { flag=1; break; } x.push(xx); y.push(yy); z.push(zz); use[zz][xx][yy]=1; nxtcou++; } if(flag) { while(!x.empty()) x.pop(),y.pop(),z.pop(); break; } cou++; if(cou==lastcou) { lastcou=nxtcou; ans++; cou=0; nxtcou=0; } } if(flag) printf("Escaped in %d minute(s).\n",ans+1); else printf("Trapped!\n"); } return 0; }
相关文章推荐
- POJ 2251 Dungeon Master
- poj 2251 Dungeon Master(广搜)
- POJ 2251 Dungeon Master ( BFS )
- 【POJ】[2251]Dungeon Master
- poj 2251 Dungeon Master()
- POJ 2251 Dungeon Master(三维BFS)
- POJ 2251 Dungeon Master(BFS)
- POJ 2251 Dungeon Master
- poj 2251 Dungeon Master( bfs )
- POJ 2251 Dungeon Master
- POJ 2251 Dungeon Master(BFS)
- POJ ~ 2251 ~ Dungeon Master (3维BFS)
- POJ 2251 Dungeon Master (三维BFS)
- poj 2251 Dungeon Master (BFS 三维)
- poj 2251 Dungeon Master (BFS)
- POJ 2251 Dungeon Master【BFS】
- POJ-2251 Dungeon Master (BFS模板题)
- POJ 2251 Dungeon Master (广度搜索)
- poj 2251 Dungeon Master
- POJ 2251 - Dungeon Master(BFS)