kuangbin 1B简单bfs(模板题)
2017-04-04 16:54
267 查看
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.
Is an escape possible? If yes, how long will it take?
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).
L is the number of levels making up the dungeon.
R and C are the number of rows and columns making up the plan of each level.
Then there will follow L blocks of R lines each containing C characters. Each character describes one cell of the dungeon. A cell full of rock is indicated by a '#' and empty cells are represented by a '.'. Your starting position is indicated by 'S' and the
exit by the letter 'E'. There's a single blank line after each level. Input is terminated by three zeroes for L, R and C.
Output
Each maze generates one line of output. If it is possible to reach the exit, print a line of the form
Escaped in x minute(s).
where x is replaced by the shortest time it takes to escape.
If it is not possible to escape, print the line
Trapped!
Sample Input
Sample Output
分析:一:注意方向,有上下 东西南北 一共六个方向,千万不要遗漏。
二 : 在判断是否能走的时候 '.' 和 'E' 是 或者 的关系。
代码:
and the maze is surrounded by solid rock on all sides.
Is an escape possible? If yes, how long will it take?
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).
L is the number of levels making up the dungeon.
R and C are the number of rows and columns making up the plan of each level.
Then there will follow L blocks of R lines each containing C characters. Each character describes one cell of the dungeon. A cell full of rock is indicated by a '#' and empty cells are represented by a '.'. Your starting position is indicated by 'S' and the
exit by the letter 'E'. There's a single blank line after each level. Input is terminated by three zeroes for L, R and C.
Output
Each maze generates one line of output. If it is possible to reach the exit, print a line of the form
Escaped in x minute(s).
where x is replaced by the shortest time it takes to escape.
If it is not possible to escape, print the line
Trapped!
Sample Input
3 4 5 S.... .###. .##.. ###.# ##### ##### ##.## ##... ##### ##### #.### ####E 1 3 3 S## #E# ### 0 0 0
Sample Output
Escaped in 11 minute(s). Trapped!
分析:一:注意方向,有上下 东西南北 一共六个方向,千万不要遗漏。
二 : 在判断是否能走的时候 '.' 和 'E' 是 或者 的关系。
代码:
#include<iostream> #include<cstdio> #include<string.h> #include<math.h> #include<string> #include<map> #include<set> #include<vector> #include<algorithm> #include<queue> using namespace std; const int INF = 100000000; int mx[6] = { 0,0,1,0,-1,0 }; int my[6] = { 0,0,0,1,0,-1 }; int mz[6] = { -1,1,0,0,0,0 }; struct Point { int x; int y; int z; }; int L, R, C; char maze[30][30][30]; int ans[30][30][30]; int main() { while (cin >> L >> R >> C) { memset(maze, 0, sizeof(maze)); memset(ans, 0, sizeof(ans)); int l1, l2, r1, r2, c1, c2; if (L == 0) { break; } for (int i = 0; i<L; i++) { for (int j = 0; j<R; j++) { for (int k = 0; k<C; k++) { cin >> maze[i][j][k]; ans[i][j][k] = INF; if (maze[i][j][k] == 'S') { l1 = i; r1 = j; c1 = k; } if (maze[i][j][k] == 'E') { l2 = i; r2 = j; c2 = k; } } } } ans[l1][r1][c1] = 0; queue<Point> que; Point temp = { c1,r1,l1 }; que.push(temp); while (que.size()) { Point flag = que.front(); que.pop(); if (maze[flag.z][flag.y][flag.x] == 'E') { break; } for (int i = 0; i < 5; i++) { int dx = flag.x + mx[i]; int dy = flag.y + my[i]; int dz = flag.z + mz[i]; if (dx < C && dx >= 0 && dy < R && dy >= 0 && dz < L && ans[dz][dy][dx] == INF) { if (maze[dz][dy][dx] == '.' || maze[dz][dy][dx] == 'E') { temp = { dx,dy,dz }; que.push(temp); ans[dz][dy][dx] = ans[flag.z][flag.y][flag.x] + 1; } } } } if (ans[l2][r2][c2] != INF) printf("Escaped in %d minute(s).\n", ans[l2][r2][c2]); else printf("Trapped!\n"); } return 0; }
相关文章推荐
- [kuangbin带你飞]专题一 简单搜索 Prime Path :BFS
- 搜索练习6/poj.org/problem3278 /Catch That Cow/简单的bfs模板
- [kuangbin带你飞]专题一 简单搜索 Dungeon Master : BFS
- kuangbin 简单搜索 J 双bfs
- [kuangbin带你飞]专题一 简单搜索 Pots : BFS
- [kuangbin带你飞]专题一 简单搜索 Catch That Cow : bfs
- 寒假集训 最简单的bfs模板题Dungeon Master题解
- ABAP--SAP的SCreen录入的简单模板
- 关于IBatisNet的两个简单CodeSmith模板
- ABAP--SAP的SCreen录入的简单模板
- 默默简单的写了一个模板引擎
- 不要递给我花里胡俏的简历,给我一点简洁(不是简单)而能突出你自己的表达——面对成千上万的求职者,你真的以为HR会去看你那封100个人有99个差不多的求职信、和装订得像书本一样的简历模板内容吗?
- [DataGrid技巧]将RadioButton加入到DataGrid模板列后单选简单实现
- 简单的模板实例,实现简单的运算符重载
- ABAP--SAP的SCreen录入的简单模板
- 学习C++模板---模板类带简单参数,并且添加缺省参数
- XML与ASP简单结合实现HTML模板功能
- dotNet中ArrayList的C++模板简单实现
- XML与ASP简单结合实现HTML模板功能
- XML与ASP简单结合实现HTML模板功能