这是一个在三维空间中找出口的最短路径问题,从出发点开始,广度优先遍历地图,记录到达各地所需的步数,然后,AC!

但要小心,别漏了外加一层墙,不然就WA了(不加的话最外一层判断能否外的时候怎么办,哈哈)。

#include <iostream>
#include <queue>
#include <string.h>using namespace std;const int maxn = 30 + 10;typedef struct Tnode        //定义结点数据类型
{int x;int y;int z;
}node;int L, R, C;
char maze[maxn][maxn][maxn];        //输入的地图
int vis[maxn][maxn][maxn];      //记录到达地图中各点所需步数,同时可表示状态,初始值为-1int dx[] = {-1, 1, 0,  0, 0,  0};       //行数偏移量
int dy[] = { 0, 0, 1, -1, 0,  0};       //列数偏移量
int dz[] = { 0, 0, 0,  0, 1, -1};       //层数偏移量bool bfs(node n)        //广度优先遍历,主要记录每到一个点的步数
{int i;queue<node> qu;     //广度优先遍历中用到的队列qu.push(n);     //第一个元素入列vis[n.x][n.y][n.z] = 0;     //改其步数为0while(!qu.empty()){n = qu.front();qu.pop();node newnode;       //将要遍历到的结点for(i = 0; i < 6; i++)      //north, south, east, west, up, down 共6个方向进行遍历{newnode.x = n.x + dx[i];newnode.y = n.y + dy[i];newnode.z = n.z + dz[i];if(maze[newnode.x][newnode.y][newnode.z] == 'E')        //如果找到出口,返回1{vis[newnode.x][newnode.y][newnode.z] = vis[n.x][n.y][n.z] + 1;return 1;}else if(maze[newnode.x][newnode.y][newnode.z] == '.' && vis[newnode.x][newnode.y][newnode.z] == -1)     //如果不是出口但可走的话{qu.push(newnode);vis[newnode.x][newnode.y][newnode.z] = vis[n.x][n.y][n.z] + 1;}}}return 0;
}int main()
{int i, j, k;node s, e;      //s为出发点,e为出口while(cin>>L>>R>>C){if(L == 0 && R == 0 && C == 0)return 0;for(i = 1; i <= L; i++)for(j = 1; j <= R; j++)for(k = 1; k <= C; k++){cin>>maze[i][j][k];if(maze[i][j][k] == 'S')        //输入的时候就记录出发点{s.x = i;s.y = j;s.z = k;}if(maze[i][j][k] == 'E')        //输入的时候就记录出口{e.x = i;e.y = j;e.z = k;}}for(i = 0; i <= R+1; i++)       //外加一层墙for(j = 0; j <= C+1; j++){maze[0][i][j] = '#';maze[L+1][i][j] = '#';}for(i = 0; i <= R+1; i++)       //外加一层墙for(j = 0; j <= L+1; j++){maze[i][j][0] = '#';maze[i][j][C+1] = '#';}for(i = 0; i <= L+1; i++)       //外加一层墙for(j = 0; j <= C+1; j++){maze[i][0][j] = '#';maze[i][R+1][j] = '#';}memset(vis, -1, sizeof(vis));       //初始化步数状态数组为-1if(bfs(s))cout<<"Escaped in "<<vis[e.x][e.y][e.z]<<" minute(s)."<<endl;elsecout<<"Trapped!"<<endl;}return 0;
}

zoj - 1940 - Dungeon Master相关推荐

  1. B - Dungeon Master POJ - 2251

    B - Dungeon Master POJ - 2251 题目: 逃离3D迷宫,n <=30 首先是dfs,算一下最坏情况共30层,每层有30*30的循环, 复杂度 3030*30 显然严重爆 ...

  2. POJ 2251 Dungeon Master(三维BFS求最短路径)

    3D dungeon 时间限制: 1 Sec  内存限制: 128 MB 提交: 2  解决: 2 [提交][状态][讨论版][命题人:201506020829][Edit] [TestData] 题 ...

  3. 信息学奥赛一本通(1248:Dungeon Master)

    1248:Dungeon Master 时间限制: 1000 ms         内存限制: 65536 KB 提交数: 8637     通过数: 3432 [题目描述] 这题是一个三维的迷宫题目 ...

  4. Dungeon Master 地下城大师(BFS进阶)

    题目链接:2251 -- Dungeon Master 知道你看不懂题(手动滑稽):友情链接. 题意:找到从S到E的最少步数的路径,输出该步数,不过有意思的是这个类似迷宫问题不是二维的,是一个三维迷宫 ...

  5. Dungeon Master(地牢大师、底下城主)三维bfs

    1253:Dungeon Master(地牢大师.底下城主) 要敢于变通 和普通bfs的区别,仅仅在于数组开三维+搜索方向多了上下(现在的搜索方向是 上下东南西北) bfs多组输入要记得清空队列 // ...

  6. Dungeon Master题解bfs

    Dungeon Master 题面翻译 题目描述 输入格式 输出格式 样例 #1 样例输入 #1 样例输出 #1 题解思路及TIME EXCEEDED问题 题解 超时题解(个人觉得没问题) 题面翻译 ...

  7. Dungeon Master(poj2251,bfs)

    http://poj.org/problem?id=2251 http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=15203 Dun ...

  8. BFS - Dungeon Master

    Dungeon Master 题目链接: https://vjudge.net/problem/POJ-2251 题目: You are trapped in a 3D dungeon and nee ...

  9. (POJ - 2251)Dungeon Master(bfs)

    题目链接:2251 -- Dungeon Master (poj.org) 这是一个典型的bfs迷宫问题,只不过是三维的,唯一需要注意的就是输入要用cin,不要用scanf,因为有换行,其他没什么了, ...

最新文章

  1. 【文本分类】基于改进CHI和PCA的文本特征选择
  2. 比特币现金的一年回顾
  3. 第十一讲 二阶齐次线性ODE相关理论
  4. 一个历史遗留项目清理总结
  5. zookeeper和etcd有状态服务部署
  6. jquery 读取页面load get post ajax 四种方式代码写法
  7. svm各种工具箱(先放着了,省的找起来麻烦^.^)
  8. android中屏幕保护的实现的,Android 屏幕保护程序制做及源码
  9. 概率论与数理统计浙江大学笔记和课后答案
  10. Ubuntu的root
  11. Android 4.0.4系统下实现apk的静默安装和启动
  12. 基于FPGA实现的DDS双通道信号发生器
  13. oracle11g rac转换单机,oracle11g rac RMAN备份恢复至单机
  14. 地球人的来源1【由罗斯威尔事件得到的可能解释】
  15. python多线程(Multiprocessing)与多线程(Multithreading)区别优缺点最详细解释
  16. 10.1 黑马Vue电商后台管理系统之完善订单管理模块--加入修改订单模块
  17. 5星|《上帝的手术刀》:人类编辑自身基因的技术与商业过程。
  18. 什么是以太网,它在WiFi世界中的价值是什么?
  19. 遇到class path resource [applicationcontext.xml] cannot be opened becaus的问题该怎么解决??
  20. buddypress主题_BuddyPress入门指南:提示和资源

热门文章

  1. 数据计算中间件技术综述 1
  2. 新产品软文推广如何做?
  3. python可以引流吗_python能干嘛?你所不知道的Python有趣用途(上)
  4. Kylin即席查询教程
  5. php 两表关联查询,Thinkphp连多表查询,关联2个或多个字段
  6. Mininet 上启用 DCTCP 和 ECN 进行拥塞控制、使用 HTB 和 RED 队列进行流量控制
  7. c++解决大整数乘法
  8. ubuntu ssh配置
  9. LaTeX 公式换行
  10. java常量和变量 注意事项,建议1: 不要在常量和变量中出现易混淆的字母