POJ 2251 Dungeon Master (三维BFS)
2013-12-19 18:22
573 查看
Dungeon Master
大意:给你一个三维的地图,可以上下左右前后的运动,求从‘S’到‘E’的对短距离。
思路: 训练计划上说是DFS,敲着敲着发现敲不动了,就BFS了。
大意:给你一个三维的地图,可以上下左右前后的运动,求从‘S’到‘E’的对短距离。
思路: 训练计划上说是DFS,敲着敲着发现敲不动了,就BFS了。
#include <stdio.h> #include <queue> #include <string.h> #include <algorithm> using namespace std; int Map[35][35][35]; int s_x, s_y, s_z; int b_x, b_y, b_z; int e_x, e_y, e_z; bool dis[35][35][35]; int ans[300000]; int d[][3] = {{-1, 0, 0}, {1, 0, 0}, {0, -1, 0}, {0, 1, 0}, {0, 0, -1}, {0, 0, 1}}; int Ans; struct node { int x, y, z; } t[300000]; bool is_board(int a, int b, int c) { if(a >= 1 && a <= b_x && b >= 1 && b <= b_y && c >= 1 && c <= b_z) return true; return false; } int BFS() { int front, rear; int dx, dy, dz; memset(dis, 0, sizeof(dis)); memset(ans, 0, sizeof(ans)); t[0].x = s_x, t[0].y = s_y, t[0].z = s_z; //printf("%d %d %d\n", t[0].x, t[0].y, t[0].z); front = rear = 0; while(front <= rear) { for(int i = 0; i < 6; i++) { dx = t[front].x + d[i][0]; dy = t[front].y + d[i][1]; dz = t[front].z + d[i][2]; //printf("#%d %d %d\n", dx, dy, dz); if(!dis[dx][dy][dz] && Map[dx][dy][dz] && is_board(dx, dy, dz)) { //printf("*%d %d %d\n", dx, dy, dz); dis[dx][dy][dz] = true; t[++rear].x = dx; t[rear].y = dy; t[rear].z = dz; ans[rear] = ans[front]+1; // printf("%d %d %d\n", e_x, e_y, e_z); //printf("%d\n", rear); if(dx == e_x && dy == e_y && dz == e_z) return ans[rear]; } } front++; } return 0; } void Solve() { char c; while(~scanf("%d%d%d%*c", &b_x, &b_y, &b_z)) { if(!b_x && !b_y && !b_z) break; memset(Map, 0, sizeof(Map)); for(int i = 1; i <= b_x; i++) { for(int j = 1; j <= b_y; j++) { for(int k = 1; k <= b_z; k++) { scanf("%c", &c); if(c == 'S') s_x = i, s_y = j, s_z = k; else if(c =='E') { e_x = i, e_y = j, e_z = k; Map[i][j][k] = 1; } else if(c =='.') Map[i][j][k] = 1; else Map[i][j][k] = 0; } getchar(); } if(i != b_x) getchar(); } Ans = BFS(); if(Ans) printf("Escaped in %d minute(s).\n", Ans); else printf("Trapped!\n"); } } int main(void) { Solve(); return 0; }
相关文章推荐
- 算法训练之BFS POJ 2251 Dungeon Master 三维最短路径
- 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)
- poj 2251 Dungeon Master (BFS 三维)
- POJ训练计划2251_Dungeon Master(三维BFS)
- POJ 2251 Dungeon Master(三维BFS)
- POJ - 2251 Dungeon Master(三维BFS)
- poj2251 Dungeon Master(三维bfs)
- POJ 2251 Dungeon Master(三维6方向BFS)
- POJ 2251 Dungeon Master --- 三维BFS(用BFS求最短路)
- POJ 2251 Dungeon Master(三维bfs)
- POJ2251 - Dungeon Master - 三维bfs搜索
- POJ 2251 Dungeon Master(三维bfs)
- POJ - 2251 Dungeon Master (三维bfs)
- poj 2251 Dungeon Master(三维BFS)(中等)