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,就是多加一组状态,需要细心(不细心如我就找了半个 ...
随机推荐
- leetcode540
这道题目的要求,Note: Your solution should run in O(log n) time and O(1) space. 因此应该用二分查找的方式,代码如下: class Sol ...
- wget 递归下载整个网站(网站扒皮必备)
有时间看到别人网站的页面比较漂亮,就想给扒皮下来,学习学习.分享一个我常用网站扒皮命令wget 这个命令可以以递归的方式下载整站,并可以将下载的页面中的链接转换为本地链接. wget加上参数之后,即可 ...
- Cmake 编译opengl开源库glfw工程及使用
使用的是cmake gui进行编译的,路径输入好之后,点configure配置vs版本,这里是vs2013版本,然后如果画面出现红色的 需要再点击一下 Generate 然后直接点open proje ...
- 爬虫--selenuim和phantonJs处理网页动态加载数据的爬取
1.谷歌浏览器的使用 下载谷歌浏览器 安装谷歌访问助手 终于用上谷歌浏览器了.....激动 问题:处理页面动态加载数据的爬取 -1.selenium -2.phantomJs 1.selenium 二 ...
- vue.js 中双向绑定的实现---初级
1. 1 我们看到的变量,其实都不是独立的,它们都是windows对象上的属性 <!DOCTYPE html> <html lang="en"> <h ...
- ACM__01背包,完全背包,多重背包
今天写题的时候碰到了一道完全背包题,可是没有看出来,乱写了一通,浪费了一个晚上,顺便复习一下背包的知识 01背包 每种物品只能选择一次或者不选,求背包容量内的最大价值 先给出状态转移方程: f[i][ ...
- win 2012 安装mysql 5.7.20 及报错 This application requires Visual Studio 2013 Redistributable. Please install the Redistributable then run this installer again 的解决办法
本文地址:http://www.cnblogs.com/jying/p/7764147.html 转载请注明出处. 安装过程其实挺简单,基本上下一步下一步,可以参考我的另一篇mysql安装文章: ...
- C++ 网络编程 总结
第一次用C++写程序,对C++ 只是菜鸟级别的,倒是对C#很熟悉.两者有很大的相似性.但也有不同. 首先写了一个网络通讯用的小的MFC程序.发现 (1)MFC写界面真的好麻烦呀. 用C#写的tab ...
- eclipse git 冲突管理
- C# 监测每个方法的执行次数和占用时间(测试2)
在Nuget引用 Castle.DynamicProxy 和 Newtonsoft.Json 这个 原文:http://www.cnblogs.com/RicCC/archive/2010/03/15 ...