Dungeon Master(逃脱大师)-BFS
Dungeon Master
Description
the maze is surrounded by solid rock on all sides.
Is an escape possible? If yes, how long will it take?
Input
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 for L, R and C.
Output
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 5
S....
.###.
.##..
###.# #####
#####
##.##
##... #####
#####
#.###
####E 1 3 3
S##
#E#
### 0 0 0
Sample Output
Escaped in 11 minute(s).
Trapped!
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
#include<stack>
#include<cstring>
using namespace std;
const int inf=-1;
struct TP
{
int h,x,y;
TP(int h, int x, int y):h(h), x(x), y(y) {}
};
int sh,sx,sy,gh,gx,gy;
char a[100][100][100];
int m=0,n=0,h=0;
int d[100][100][100];
int dh[6]= {0,0,0,0,1,-1},dx[6]= {1,0,-1,0,0,0},dy[6]= {0,1,0,-1,0,0};
int dfs()
{
queue<TP> que;
for(int k=0; k<h; k++)
for(int i=0; i<n; i++)
for(int j=0; j<m; j++)
d[k][i][j]=inf;//初始化所有距离标记
que.push(TP(sh,sx,sy));//把开始加入队列
d[sh][sx][sy]=0;//重新定义开头的距离
while(!que.empty())//队列的循环
{
TP p = que.front();//使用队列的开头
que.pop();//踢出
if(p.h==gh&&p.x==gx&&p.y==gy) break;//判断是否是结尾
for(int i=0; i<6; i++)//移动
{
int nx=p.x+dx[i],ny=p.y+dy[i],nh=p.h+dh[i];
if(0 <= nh && 0 <= nx && 0 <= ny && nx < n && ny < m&& nh < h && a[nh][nx][ny]!='#'&&d[nh][nx][ny]==inf)//判断是否是边界以及栅栏
{
que.push(TP(nh,nx,ny));//把移动后的加入队列
d[nh][nx][ny]=d[p.h][p.x][p.y]+1;
}
}
}
return d[gh][gx][gy];
}
int main()
{
while(scanf("%d%d%d",&h,&n,&m)!=-1)
{
if(h==0&&n==0&&m==0)
return 0;
getchar();
for(int k=0; k<h; k++)
{
for(int i=0; i<n; i++)//
{
scanf("%s",&a[k][i]);
for(int j=0; j<m; j++)
if(a[k][i][j]=='S')
sh=k,sx=i,sy=j;
else if(a[k][i][j]=='E')
gh=k,gx=i,gy=j;
}
getchar();
}
int ans=dfs();
if(ans!=-1)
printf("Escaped in %d minute(s).\n",ans);
else
printf("Trapped!\n");
}
return 0;
}
Dungeon Master(逃脱大师)-BFS的更多相关文章
- POJ.2251 Dungeon Master (三维BFS)
POJ.2251 Dungeon Master (三维BFS) 题意分析 你被困在一个3D地牢中且继续寻找最短路径逃生.地牢由立方体单位构成,立方体中不定会充满岩石.向上下前后左右移动一个单位需要一分 ...
- POJ 2251 Dungeon Master【三维BFS模板】
Dungeon Master Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 45743 Accepted: 17256 Desc ...
- poj 2251 Dungeon Master 3维bfs(水水)
Dungeon Master Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 21230 Accepted: 8261 D ...
- Dungeon Master(三维bfs)
题目链接:http://poj.org/problem?id=2251 题目: Description You are trapped in a 3D dungeon and need to find ...
- 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 2252 Dungeon Master 三维水bfs
题目: http://poj.org/problem?id=2251 #include <stdio.h> #include <string.h> #include <q ...
- ZOJ 1940 Dungeon Master【三维BFS】
<题目链接> 题目大意: 在一个立体迷宫中,问你从起点走到终点的最少步数. 解题分析: 与普通的BFS基本类似,只需要给数组多加一维,并且走的时候多加 上.下这两个方向就行. #inclu ...
- Dungeon Master POJ - 2251(bfs)
对于3维的,可以用结构体来储存,详细见下列代码. 样例可以过,不过能不能ac还不知道,疑似poj炸了, #include<iostream> #include<cstdio> ...
- Dungeon Master POJ-2251 三维BFS
题目链接:http://poj.org/problem?id=2251 题目大意 你被困在了一个三维的迷宫,找出能通往出口的最短时间.如果走不到出口,输出被困. 思路 由于要找最短路径,其实就是BFS ...
- POJ 2251 Dungeon Master(三维空间bfs)
题意:三维空间求最短路,可前后左右上下移动. 分析:开三维数组即可. #include<cstdio> #include<cstring> #include<queue& ...
随机推荐
- Linux Shell命令系列(5) VI编辑器
vi编辑器是所有Unix及Linux系统下标准的编辑器,它的强大不逊色于任何最新的文本编辑器,这里只是简单地介绍一下它的用法和一小部分指令.由于对Unix及Linux系统的任何版本,vi编辑器是完全相 ...
- Shell笔试题3
1.查找当前目录中所有大于500M的文件,把这些文件名写到一个文本文件中,并统计其个数.find ./ -size +500M -type f | tee file_list | wc -l 2.在目 ...
- jQuery判断动画是否执行完成
JS $(function() { $("#myDiv").bind("click", function() { if ($(this).css("t ...
- @Enable*注解的工作原理
@EnableAspectJAutoProxy @EnableAsync @EnableScheduling @EnableWebMv @EnableConfigurationProperties @ ...
- c#中反射技术在Unity中的运用
反射技术给类赋值的好处就是可以简化代码,封装的好处就显而易见了.最直接的用途就是用在在显示配置文件的时候,个人习惯性做法是做一个VO来存储需要的数据,其代码如下: internal class Bas ...
- 【Android开发笔记】杂项
Android studio shift+enter : start new line Theme 将 <style name="AppBaseTheme" pare ...
- zabbix中监控项报错
报错信息: zabbix报错(Not all processes could be identified, non-owned process info will not be shown, you ...
- 关于web开发中订单自动超时和自动收货的简单方法(window server)
最近做一个订单自动超时和自动收货的功能,因为以前是用的mysql 存储过程和定时器来完成,这次的业务逻辑相对复杂用以前的方式就不太合适,本来是准备使用定时执行php脚本来实现的,后来发现业务逻辑中使用 ...
- PHP重定向的三个方法
js的重定向方法:location.href=目标 url(如 https:www.baidu.com); php的重定向方法: header("location: https:www.ba ...
- JavaScript_HTML DEMO_1_概念
HTML DOM - 文档对象模型 当网页被加载时,浏览器会创建页面的文档对象模型(Document Object Model). 1. 通过可编程的对象模型,JavaScript获得了足够的能力来创 ...