博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
1253 Dungeon Master
阅读量:6785 次
发布时间:2019-06-26

本文共 2806 字,大约阅读时间需要 9 分钟。

题目链接:

http://noi.openjudge.cn/ch0205/1253/

http://poj.org/problem?id=2251

总时间限制: 1000ms  内存限制: 65536kB
描述
You are trapped in a 3D dungeon and need to find the quickest way out! The dungeon is composed of unit cubes which may or may not be filled with rock. It takes one minute to move one unit north, south, east, west, up or down. You cannot move diagonally and the maze is surrounded by solid rock on all sides. 
Is an escape possible? If yes, how long will it take? 
输入
The input consists of a number of dungeons. Each dungeon description starts with a line containing three integers L, R and C (all limited to 30 in size). 
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.
输出
Each maze generates one line of output. If it is possible to reach the exit, print a line of the form 
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!
样例输入
3 4 5S.....###..##..###.#############.####...###########.#######E1 3 3S###E####0 0 0
样例输出
Escaped in 11 minute(s).Trapped!

题目大意与算法分析:

这题是一个三维的迷宫题目,其中用‘.’表示空地,用‘#’表示障碍物,'S'表示出发点,
'E'表示终点,求从起点到终点的最小移动次数。
解法和二维类似,只是在行动时除了东南西北移动外还多了上下。可以上下左右前后移动,
每次都只能移动到相邻的空位,每次需要花费一分钟,求从起点到终点最少需要多久。

输入有若干组测试数据,每一组数据格式如下:

首先输入z,x,y表示三维迷宫的规模,有z层,每层是x行y列。 (z,x,y都在30以内.)
然后输入z层的数据,每一层是x*y的字符数组,行内字符之间无空格。
当输入的z,x,y都为0时表示输入结束。

对每一组测试数据,输出最少需要的时间,格式如"Escaped in 11 minute(s).",每组数据的结果占一行。

假如无法到达,输出"Trapped!".

这题用BFS解,每次去队首元素,如果是终点则输出结果移动的次数,否则,从该点开始分别

向东南西北上下移动(如果可以走的话)并继续搜,如果到队列为空还没搜到解法,则说明无解。

题解可以参考:

http://www.cnblogs.com/ACShiryu/archive/2011/07/23/2114994.html
http://blog.csdn.net/libin56842/article/details/23702395

1 #include
2 #include
3 #include
4 using namespace std; 5 6 struct obj 7 { 8 int zz,xx,yy; 9 int step;//到达该点的步数 10 }; 11 12 int z,x,y; 13 char a[33][33][33]; 14 queue
q; 15 struct obj start,End; 16 bool flag; 17 18 int dz[6]={
0,0,0,0,1,-1};//上右下左前后 19 int dx[6]={-1,0,1,0,0,0}; 20 int dy[6]={
0,1,0,-1,0,0}; 21 void BFS();//广搜,数据全部在全局变量 22 23 int main(int argc, char *argv[]) 24 { 25 int i,j,k; 26 27 while(scanf("%d%d%d",&z,&x,&y)!=EOF) 28 { 29 getchar();//吸收回车 30 if(z==0&&x==0&&y==0) break; 31 32 //输入三维迷宫 33 for(k=0;k
=0&&tzz
=0&&txx
=0&&tyy

 

你可能感兴趣的文章
Struts2 | 在struts2值栈中存储数据的三种方式
查看>>
ubuntu的python开发环境准备
查看>>
Java_07_01 正则表达式
查看>>
为微信域名而生的猴子数据 api接口
查看>>
在IDEA中Spring boot配置热部署无效问题解决方式
查看>>
很幽默的讲解六种Socket I/O模型
查看>>
《Objective-c基础教程》 学习计划(第一遍)
查看>>
struts2基本流程
查看>>
Android学习--01-架构
查看>>
NFS网络文件系统
查看>>
java: SQLite使用实例
查看>>
Java手动序列化和反序列化的实现
查看>>
一次解决你的所以省略号问题,不仅仅是:text-overflow:ellipsis
查看>>
sql报错信息
查看>>
k8s 创建资源的两种方式 - 每天5分钟玩转 Docker 容器技术(124)
查看>>
使用CFileFind类查找文件并获取文件图标
查看>>
我的友情链接
查看>>
VMware Workstation8虚拟机XP安装图解
查看>>
企业VLAN配置实例
查看>>
JPush极光推送Java服务器端实例
查看>>