POJ-2251.DungeonMaster(三维BFS)
做题时需要注意,爬楼有向上和向下爬之分...
本题大意:输入 l, r, c, 分别代表地牢的楼层数和每层地牢的长和宽,地牢由rock and point and source and key组成,你初始在s位置,你只能向身边的四个方向和上下方向移动,问你是否能走出地牢,能的话求出最短路径。
本题思路:BFS爆搜就OK,我不喜欢存运动方向,所以用循环判断了,按道理循环较慢...所以根据读者喜好选择...
参考代码:
#include <cstdio>
#include <iostream>
#include <queue>
#include <cmath>
#include <cstring>
using namespace std; struct node {
int x, y, z, step;
} now, Next, source, key;
const int maxn = + ;
int l, r, c, ans;
char dungeon[maxn][maxn][maxn];
bool vis[maxn][maxn][maxn]; int bfs() {
memset(vis, false, sizeof vis);
source.step = ;
vis[source.x][source.y][source.z] = true;
queue <node> Q;
Q.push(source);
while(!Q.empty()) {
now = Q.front();
Q.pop();
if(now.x == key.x && now.y == key.y && now.z == key.z) return now.step;
Next.step = now.step + ;
for(int i = -; i <= ; i ++)
if(i != ) {
Next.x = now.x + i, Next.y = now.y, Next.z = now.z;
if(Next.x >= && Next.y >= && Next.z >= && Next.x < l && Next.y < r && Next.z < c && !vis[Next.x][Next.y][Next.z] && dungeon[Next.x][Next.y][Next.z] != '#' ) {
Next.step = now.step + ;
vis[Next.x][Next.y][Next.z] = true;
Q.push(Next);
}
}
for(int dy = -; dy <= ; dy ++) {
for(int dz = -; dz <= ; dz ++) {
if((int)(abs(dy - dz)) == ) {
Next.x = now.x + , Next.y = now.y + dy, Next.z = now.z + dz;
if(Next.x >= && Next.y >= && Next.z >= && Next.x < l && Next.y < r && Next.z < c && !vis[Next.x][Next.y][Next.z] && dungeon[Next.x][Next.y][Next.z] != '#') {
vis[Next.x][Next.y][Next.z] = true;
Q.push(Next);
}
}
}
}
}
return -;
} int main () {
while(~scanf("%d %d %d", &l, &r, &c)) {
if(l == && r == && c == ) break;
for(int i = ; i < l; i ++) {
for(int j = ; j < r; j ++) {
for(int k = ; k < c; k ++) {
cin >> dungeon[i][j][k];
if(dungeon[i][j][k] == 'S') { source.x = i; source.y = j; source.z = k; }
if(dungeon[i][j][k] == 'E') { key.x = i; key.y = j; key.z = k; }
}
}
}
ans = bfs();
if(ans != -) printf("Escaped in %d minute(s).\n", ans);
else printf("Trapped!\n");
}
return ;
}
POJ-2251.DungeonMaster(三维BFS)的更多相关文章
- poj 2251 Dungeon Master( bfs )
题目:http://poj.org/problem?id=2251 简单三维 bfs不解释, 1A, 上代码 #include <iostream> #include<cst ...
- poj 2251 Dungeon Master (BFS 三维)
You are trapped in a 3D dungeon and need to find the quickest way out! The dungeon is composed of un ...
- POJ 2251 Dungeon Master bfs 难度:0
http://poj.org/problem?id=2251 bfs,把两维换成三维,但是30*30*30=9e3的空间时间复杂度仍然足以承受 #include <cstdio> #inc ...
- Dungeon Master (POJ - 2251)(BFS)
转载请注明出处: 作者:Mercury_Lc 地址:https://blog.csdn.net/Mercury_Lc/article/details/82693907 题目链接 题解:三维的bfs,一 ...
- POJ 2251 Dungeon Master (BFS最短路)
三维空间里BFS最短路 #include <iostream> #include <cstdio> #include <cstring> #include < ...
- POJ:Dungeon Master(三维bfs模板题)
Dungeon Master Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 16748 Accepted: 6522 D ...
- POJ 2251 Dungeon Master --- 三维BFS(用BFS求最短路)
POJ 2251 题目大意: 给出一三维空间的地牢,要求求出由字符'S'到字符'E'的最短路径,移动方向可以是上,下,左,右,前,后,六个方向,每移动一次就耗费一分钟,要求输出最快的走出时间.不同L层 ...
- POJ.2251 Dungeon Master (三维BFS)
POJ.2251 Dungeon Master (三维BFS) 题意分析 你被困在一个3D地牢中且继续寻找最短路径逃生.地牢由立方体单位构成,立方体中不定会充满岩石.向上下前后左右移动一个单位需要一分 ...
- 【BFS】POJ 2251
POJ 2251 Dungeon Master 题意:有一个地图,三维,走的方向是上下,左右,前后.问你最小步数从起始点走到出口. 思路:三维的BFS,就是多加一组状态,需要细心(不细心如我就找了半个 ...
随机推荐
- jgGrid pivot reload重新加载及刷新数据
1.当使用jqGrid进行多维表时,reload方法会不停的重复增加标题的行数. 解决办法:直接删除jqGrid,重新初始化页面. function query(){//crossTable pivo ...
- 重置mysql5.7密码
其实想要重置 5.7 的密码很简单,就一层窗户纸: 1.修改 /etc/my.cnf,在 [mysqld] 小节下添加一行:skip-grant-tables=1 这一行配置让 mysqld 启动时不 ...
- UI5-学习篇-13-Eclipse 开发UI5应用
1.Eclipse环境配置及组件安装 UI5-学习篇-1-Eclipse开发工具及环境搭建 2.创建项目 3.设置代理映射 打开WebContent->WEB-INF->web.xml文件 ...
- BroadcastReceiver的使用,动态注册和注销,优先级和中断控制
BroadcastReceiver: BroadcastReceiver(广播接收器)是Android中的四大组件之一,用来通知某些事件的相关信息,如下载完成,设置改变等. 默认的BroadcastR ...
- C++17尝鲜:string_view
string_view string_view 是C++17所提供的用于处理只读字符串的轻量对象.这里后缀 view 的意思是只读的视图. 通过调用 string_view 构造器可将字符串转换为 s ...
- 趣味编程:静夜思(Kotlin版)
import java.util.* fun verticalWriting(txt:String, offset:Int) = txt.mapIndexed { i, c -> Pair(i, ...
- 转: python requests的安装与简单运用
requests是Python的一个HTTP客户端库,跟urllib,urllib2类似,那为什么要用requests而不用urllib2呢? 官方文档中是这样说明的: python的标准库urlli ...
- Linux下GDB调试简单示例
这里介绍对文件first.c的基本GDB调试操作,只有部分命令,只是一个示例,运行环境为装有gcc编译器和gdb调试器的Linux环境,基本GDB调试命令如下表: 命令 ...
- [Shell]Bash基本功能:历史命令 & 别名 & Bash快捷键
/*----------------------------------------------------------------------------------------------- @黑 ...
- PHP查询登录中的sql注入
---------------------------------------------------------------------------------------------------- ...