POJ 2251 Dungeon Master (三维BFS)
2017-02-08 18:27
357 查看
题目链接
poj2251题目大意
给定一个三维的地图,‘#’不能走,‘.’能走,求起到S到终点E的最短路。分析
这题就是一道求迷宫中的最短路的题,只不过迷宫是三维的,方向数组由原来的4个方向变成了6个方向。直接BFS求距离即可。PS:虽说是道简单题,但我还是WA了好几次QAQ,原因是我一开始判断格子是否能走的布尔函数是这样写的:
bool can(int x,int y,int z) { if ((maze[x][y][z]=='.'||maze[x][y][z]=='E')&&(!vis[x][y][z])) return true; return false; }
这样看似把扩展范围限定在界内了,但因为题目是多组数组的,而我每一次迷宫的字符数组是不清空,当新输入的迷宫比旧迷宫尺寸小时,旧迷宫多出来的部分仍然存在,我这个判断函数会导致扩展出界。因此,这种题目的判断函数还是老老实实把不服和的情况都列出来为好。
代码
#include <iostream> #include <cstring> #include <queue> #define MAXN 35 using namespace std; struct Node { int x,y,z,step; }s; char maze[MAXN][MAXN][MAXN]; bool vis[MAXN][MAXN][MAXN]; int ans,l,r,c; bool can(int x,int y,int z) { if (x<1||x>r||y<1||y>c||z<1||z>l) //判断是否出界 return false; if (maze[x][y][z]=='#') //判断是否是障碍物 return false; if (vis[x][y][z]) //判断是否访问过 return false; return true; } bool can(int x,int y,int z) { if } bool Bfs() { queue<Node> Q; int d[6][3]={{0,0,1},{0,0,-1},{0,-1,0},{0,1,0},{-1,0,0},{1,0,0}}; memset(vis,false,sizeof(vis)); vis[s.x][s.y][s.z]=true; while (!Q.empty()) Q.pop(); Q.push(s); while (!Q.empty()) { Node temp=Q.front(); Q.pop(); if (maze[temp.x][temp.y][temp.z]=='E') { ans=temp.step; return true; } for (int i=0;i<=5;i++) { Node temp2; temp2.x=temp.x+d[i][0]; temp2.y=temp.y+d[i][1]; temp2.z=temp.z+d[i][2]; if (can(temp2.x,temp2.y,temp2.z)) { temp2.step=temp.step+1; vis[temp2.x][temp2.y][temp2.z]=true; Q.push(temp2); } } } return false; } int main() { int i,j,k; while (cin>>l>>r>>c) { if (!l&&!r&&!c) break; for (k=1;k<=l;k++) for (i=1;i<=r;i++) for (j=1;j<=c;j++) { cin>>maze[i][j][k]; if (maze[i][j][k]=='S') { s.x=i;s.y=j;s.z=k; s.step=0; } } if (Bfs()) cout<<"Escaped in "<<ans<<" minute(s)."<<endl; else cout<<"Trapped!"<<endl; } return 0; }
相关文章推荐
- POJ 2251 Dungeon Master --- 三维BFS(用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(三维BFS)
- POJ训练计划2251_Dungeon Master(三维BFS)
- poj2251 Dungeon Master(三维bfs)
- POJ2251 - 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 (三维bfs)
- POJ 2251 Dungeon Master (三维BFS)
- poj-2251 Dungeon Master 三维BFS
- 算法训练之BFS POJ 2251 Dungeon Master 三维最短路径
- POJ 2251 Dungeon Master(三维6方向BFS)
- POJ 2251 Dungeon Master 简单的三维bfs