【POJ 2251】Dungeon Master(bfs)
BUPT2017 wintertraining(16) #5 B
POJ - 2251
题意
3维的地图,求从S到E的最短路径长度
题解
bfs
代码
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
#define N 35
using namespace std;
struct node{
int x,y,z,d;
}s,e;
int L,R,C;
int m[N][N][N],vis[N][N][N];
int ans;
int dx[7]={0,0,0,0,1,-1};
int dy[7]={0,0,1,-1,0,0};
int dz[7]={1,-1,0,0,0,0};
bool ck(int x,int u){
return x>=0&&x<u;
}
void bfs(){
ans=0;
memset(vis,0,sizeof vis);
queue<node>q;
vis[s.x][s.y][s.z]=1;
s.d=0;
q.push(s);
while(!q.empty()){
node u=q.front();
q.pop();
if(u.x==e.x&&u.y==e.y&&u.z==e.z){
ans=u.d;
return;
}
for(int i=0;i<6;i++){
int nx=u.x+dx[i],ny=u.y+dy[i],nz=u.z+dz[i];
if(ck(nx,L)&&ck(ny,R)&&ck(nz,C)&&!vis[nx][ny][nz]&&m[nx][ny][nz]){
q.push((node){nx,ny,nz,u.d+1});
vis[nx][ny][nz]=1;
}
}
}
}
int main() {
while(scanf("%d%d%d",&L,&R,&C),L){
memset(m,0,sizeof m);
for(int i=0;i<L;i++){
for(int j=0;j<R;j++)
for(int k=0;k<C;k++){
char c;
scanf(" %c",&c);
if(c=='S')s=(node){i,j,k};
if(c=='E')e=(node){i,j,k};
if(c!='#')m[i][j][k]=1;
}
}
bfs();
if(ans)printf("Escaped in %d minute(s).\n",ans);
else puts("Trapped!");
}
return 0;
}
【POJ 2251】Dungeon Master(bfs)的更多相关文章
- 【POJ - 2251】Dungeon Master (bfs+优先队列)
Dungeon Master Descriptions: You are trapped in a 3D dungeon and need to find the quickest way out! ...
- 【POJ - 3669】Meteor Shower(bfs)
-->Meteor Shower Descriptions: Bessie听说有场史无前例的流星雨即将来临:有谶言:陨星将落,徒留灰烬.为保生机,她誓将找寻安全之所(永避星坠之地).目前她正在平 ...
- 【POJ - 1064】Cable master(二分)
Cable master Descriptions 输入2个数 N K n条绳子 要分成大于等于k段 求每段最长多长呢?并且每段不能小于1cm 必须以厘米精度写入数字,小数点后正好是两位数.如 ...
- 【POJ - 3126】Prime Path(bfs)
Prime Path 原文是English 这里直接上中文了 Descriptions: 给你两个四位的素数a,b.a可以改变某一位上的数字变成c,但只有当c也是四位的素数时才能进行这种改变.请你计算 ...
- 棋盘问题(DFS)& Dungeon Master (BFS)
1棋盘问题 在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别.要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子的所有可行的 ...
- 【POJ 1273】Drainage Ditches(网络流)
一直不明白为什么我的耗时几百毫秒,明明差不多的程序啊,我改来改去还是几百毫秒....一个小时后:明白了,原来把最大值0x3f(77)取0x3f3f3f3f就把时间缩短为16ms了.可是为什么原来那样没 ...
- BZOJ 2296【POJ Challenge】随机种子(构造)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2296 [题目大意] 给出一个数x,求一个10的16次以内的数使得其被x整除并且数字包含 ...
- 【POJ - 3984】迷宫问题(dfs)
-->迷宫问题 Descriptions: 定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0 ...
- poj 2251 Dungeon Master(bfs)
Description You are trapped in a 3D dungeon and need to find the quickest way out! The dungeon is co ...
随机推荐
- Luogu2045 方格取数加强版(K取方格数) 费用流
题目传送门 题意:给出一个$N \times N$的方格,每个格子中有一个数字.你可以取$K$次数,每次取数从左上角的方格开始,每一次只能向右或向下走一格,走到右下角结束,沿路的方格中的数字将会被取出 ...
- JAVA核心:内存、比较和Final
1.java是如何管理内存的 java的内存管理就是对象的分配和释放问题.(其中包括两部分) 分配:内存的分配是由程序完成的,程序员需要通过关键字new为每个对象申请内存空间(基本类型除外),所有的对 ...
- 深入理解USB流量数据包的抓取与分析
0x01 问题提出 在一次演练中,我们通过wireshark抓取了一个如下的数据包,我们如何对其进行分析? 0x02 问题分析 流量包是如何捕获的? 首先我们从上面的数据包分析可以知道,这是个USB的 ...
- Nginx反向代理中使用proxy_redirect重定向url
在使用Nginx做反向代理功能时,有时会出现重定向的url不是我们想要的url,这时候就可以使用proxy_redirect进行url重定向设置了.proxy_redirect功能比较强大,其作用是对 ...
- kvm虚拟化关闭虚拟网卡virbr0的方法
我们知道:kvm虚拟化环境安装好后,ifconfig会发现多了一个虚拟网卡virbr0这是由于安装和启用了libvirt服务后生成的,libvirt在服务器(host)上生成一个 virtual ne ...
- 《Linux内核设计与实现》读书笔记 18
第十八章调试 18.1 准备开始 一个bug:大部分bug通常都不是行为可靠而且定义明确的 一个藏匿bug的内核版本:找出bug首先出现的版本 相关内核代码的知识和运气 18.2内核中的bug 可以有 ...
- gitbub感想
Git 是 Linux 的创始人 Linus Torvalds 开发的开源和免费的版本管理系统,利用底层文件系统原理进行版本控制的工具.Git是目前为止最著名运用最好最受欢迎的分布式的配置管理工具. ...
- 第二个spring,第五天
陈志棚:成绩的统筹 李天麟:界面音乐 徐侃:代码算法 完成进度百分之70...会继续努力的!
- Java 一维数组作为参数和返回值
一维数组作为参数: 传数组的引用 创建数组直接传,本质也是传数组的引用 传null public class Test { //数组作为参数时,可以传递3中形式 public void m1(int[ ...
- The Golden Age CodeForces - 813B (数学+枚举)
Unlucky year in Berland is such a year that its number n can be represented as n = xa + yb, where a ...