uva532Dungeon Master
来源:互联网 发布:杯装茶 知乎 编辑:程序博客网 时间:2024/06/04 19:10
Description
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 Specification
The input file consists of a number of dungeons. Each dungeon description starts with a line containing three integersL,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 forL,R and C.
Output Specification
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 5S.....###..##..###.#############.####...###########.#######E1 3 3S###E####0 0 0
Sample Output
Escaped in 11 minute(s).Trapped!三维bfs不难但是一直犯傻先是RE又是wa30*30*30list数组我一开始开太小了#include <stdio.h>#include <string.h>#define N 30010char map[40][40][40];int flag[40][40][40], list[N][4];int step[6][4] = {{0, 1, 0}, {0, -1, 0}, {0, 0, 1}, {0, 0, -1}, {1, 0, 0}, {-1, 0, 0}};int l, r, c, cnt[N];int bfs(int l1, int r1, int c1, int l2, int r2, int c2){if (l1 == l2 && r1 == r2 && c1 == c2)return 0;int head = 0, nail = 1;cnt[head] = 0;list[head][0] = l1, list[head][1] = r1, list[head][2] = c1;while (head < nail) {for (int i = 0; i < 6; i++) {int x = step[i][0] + list[head][0];int y = step[i][1] + list[head][1];int z = step[i][2] + list[head][2];if (x >= 0 && x < l && y >= 0 && y < r && z >= 0 && z < c && !flag[x][y][z]) {if (x == l2 && y == r2 && z == c2) return cnt[head] + 1;if (map[x][y][z] == '.') {list[nail][0] = x;list[nail][1] = y;list[nail][2] = z;cnt[nail++] = cnt[head] + 1;flag[x][y][z] = 1;}}}head++;}return 0;}int main(){int l1, r1, c1, l2, r2, c2;char s;while (scanf("%d%d%d", &l, &r, &c) != EOF) {if (!l && !r && !c)break;memset(flag, 0, sizeof(flag));memset(list, 0, sizeof(list));memset(cnt, 0, sizeof(cnt));for (int i = 0; i < l; i++) {for (int j = 0; j < r; j++) {getchar();for (int k = 0; k < c; k++)scanf("%c", &map[i][j][k]);}getchar();}for (int i = 0; i < l; i++)for (int j = 0; j < r; j++)for (int k = 0; k < c; k++) {if (map[i][j][k] == 'S')l1 = i, r1 = j, c1 = k;if (map[i][j][k] == 'E')l2 = i, r2 = j, c2 = k;}int count = bfs(l1, r1, c1, l2, r2, c2);if (count)printf("Escaped in %d minute(s).\n", count);elseprintf("Trapped!\n");}return 0;}
- uva532Dungeon Master
- UVA532Dungeon Master
- Master-Master Master-slave 区别
- master to master replication
- MongoDB Master+Master同步
- Master-Master架构
- Dual Master 复制架构(Master-Master)
- Dual Master 复制架构(Master-Master)
- Master Data
- Master page_enableeventvalidation
- master..xp_cmdshell
- MASTER表
- 还原master
- MasterPage.master
- Master Data
- POJ_2251_Dungeon Master
- rebuid master
- master thread
- 《leetCode》:Reverse Integer
- 使用struts2的 下载
- ios打包ipa的四种实用方法(.app转.ipa)
- swift 快速奔跑的兔几 本节的内容是:应用程序沙盒
- 模板方法模式----设计模式系列
- uva532Dungeon Master
- ionic怎样使用LokiJS作为本地存储
- 动态链接库(DLL)总结---静态链接库的创建与使用(4)
- ubuntu13.10系统 安装中文输入法fcitx
- RSA加密算法在iOS9下的问题解决方案
- DL:RBM学习算法——Gibbs采样、变分方法、对比散度、模拟退火
- 挑战高薪的程序员建议看的文章
- delegate block 通知
- android UI学习 -- 设置界面的布局(包括style的使用,selector的使用,Checkbox自定义样式,菜单项的样式)