【一本通1248:Dungeon Master&&洛谷UVA532 Dungeon Master】
若不会广搜转向[广搜]
【题目描述】
这题是一个三维的迷宫题目,其中用‘.’表示空地,‘#’表示障碍物,‘S’表示起点,‘E’表示终点,求从起点到终点的最小移动次数,解法和二维的类似,只是在行动时除了东南西北移动外还多了上下。可以上下左右前后移动,每次都只能移到相邻的空位,每次需要花费一分钟,求从起点到终点最少要多久。
【输入】
多组测试数据。
一组测试测试数据表示一个三维迷宫:
前三个数,分别表示层数、一个面的长和宽,后面是每层的平面图。前三个数据为三个零表示结束。
【输出】
最小移动次数。
【输入样例】
3 4 5
S....
.###.
.##..
###.#
#####
#####
##.##
##...
#####
#####
#.###
####E
1 3 3
S##
#E#
###
0 0 0
【输出样例】
Escaped in 11 minute(s).
Trapped!
【提示】
对于题目给出数据的含义就是输入l,r,c,分别代表迷宫有l层,每层长宽分别是c,r。对于数据以可以这样移动:
(1,1,1)->(1,1,2)->(1,1,3)->(1,1,4)->(1,1,5)->(1,2,5)->
(1,3,5)->(1,3,4)->(1,4,4)->(2,4,4)->(2,4,5)->(3,4,,5)
共11步就可以到达终点 对于数据二明显不能到达,则输出Trapped!
这题用BFS解,每次去队首元素,如果是终点则输出结果移动的次数,否则,从该点开始分别向东南西北上下移动(如果可以走的话)并继续搜,如果到队列为空还没搜到解法,则说明无解。
首先,这个提示很明显了吧QAQ
这说白了就是一个三维迷宫
多写几行数组,多几个特判就过了qwq
代码如下:
#include<bits/stdc++.h>
using namespace std;
int l,n,m;
struct pos{
int z,x,y,step;
pos(int z,int x,int y,int step):z(z),x(x),y(y),step(step){}
};
int sz,sx,sy;
int tz,tx,ty;
bool mat[][][];
bool vis[][][];
const int dz[]={,,,-,,},
dx[]={,,,,-,},
dy[]={,,,,,-};
bool pan(int z,int x,int y){
return z>=&&z<=l&&x>=&&x<=n&&y>=&&y<=m&&mat[z][x][y]==;
}
int main(){
while(true){
cin>>l>>n>>m;
if(l==&&n==&&m==)break;
for(int k=;k<=l;k++){
for(int i=;i<=n;i++){
for(int j=;j<=m;j++){
char c;
cin>>c;
if(c=='.')mat[k][i][j]=;
else if(c=='#')mat[k][i][j]=;
else if(c=='S'){
mat[k][i][j]=;
sz=k;
sx=i;
sy=j;
}else if(c=='E'){
mat[k][i][j]=;
tz=k;
tx=i;
ty=j;
}
vis[k][i][j]=;
}
}
}
queue<pos>q;
q.push(pos(sz,sx,sy,));
vis[sz][sx][sy]=;
bool flag=;
while (!q.empty())
{
pos head=q.front();
q.pop();
if(head.z==tz&&head.x==tx&&head.y==ty){
cout<<"Escaped in "<<head.step<<" minute(s).\n";
flag=;
break;
}
for(int i=;i<;i++){
int zz=head.z+dz[i],xx=head.x+dx[i],yy=head.y+dy[i];
if(!pan(zz,xx,yy))continue;
if(vis[zz][xx][yy])continue;
q.push(pos(zz,xx,yy,head.step+));
vis[zz][xx][yy]=;
}
}
if(flag)cout<<"Trapped!\n";
}
}
【一本通1248:Dungeon Master&&洛谷UVA532 Dungeon Master】的更多相关文章
- 「SDOI2014」旅行(信息学奥赛一本通 1564)(洛谷 3313)
题目描述 S国有N个城市,编号从1到N.城市间用N-1条双向道路连接,满足从一个城市出发可以到达其它所有城市.每个城市信仰不同的宗教,如飞天面条神教.隐形独角兽教.绝地教都是常见的信仰. 为了方便,我 ...
- 【03NOIP普及组】麦森数(信息学奥赛一本通 1925)(洛谷 1045)
[题目描述] 形如2P-1的素数称为麦森数,这时P一定也是个素数.但反过来不一定,即如果P是个素数,2P-1不一定也是素数.到1998年底,人们已找到了37个麦森数.最大的一个是P=3021377,它 ...
- 【00NOIP普及组】计算器的改良(信息学奥赛一本通 1910)(洛谷 1022)
[题目描述] NCL是一家专门从事计算器改良与升级的实验室,最近该实验室收到了某公司所委托的一个任务:需要在该公司某型号的计算器上加上解一元一次方程的功能.实验室将这个任务交给了一个刚进入的新手ZL先 ...
- 【00NOIP普及组】税收与补贴问题(信息学奥赛一本通 1911)( 洛谷 1023)
[题目描述] 每样商品的价格越低,其销量就会相应增大.现已知某种商品的成本及其在若干价位上的销量(产品不会低于成本销售),并假设相邻价位间销量的变化是线性的且在价格高于给 定的最高价位后,销量以某固定 ...
- 一本通 一笔画问题 洛谷P1636 Einstein学画画
P1636 Einstein学画画 相信大家都玩过一笔画这种游戏吧,这其实算得上是我们能够接触到的比较常见的数学问题,有一个很知名的就是七桥问题 这个问题包括所有的一笔画问题都是在欧拉回路的涵盖范围内 ...
- 【NOI2002】荒岛野人(信息学奥赛一本通 1637)(洛谷 2421)
题目描述 克里特岛以野人群居而著称.岛上有排列成环行的M个山洞.这些山洞顺时针编号为1,2,…,M.岛上住着N个野人,一开始依次住在山洞C1,C2,…,CN中,以后每年,第i个野人会沿顺时针向前走Pi ...
- 【09NOIP提高组】Hankson 的趣味题(信息学奥赛一本通 1856)(洛谷 1072)
题目描述 Hanks 博士是BT (Bio-Tech,生物技术) 领域的知名专家,他的儿子名叫Hankson.现在,刚刚放学回家的Hankson 正在思考一个有趣的问题.今天在课堂上,老师讲解了如何求 ...
- 数列分段II(信息学奥赛一本通 1436)(洛谷 1182)
[题目描述] 对于给定的一个长度为N的正整数数列A[i],现要将其分成M(M≤N)段,并要求每段连续,且每段和的最大值最小. 关于最大值最小: 例如一数列4 2 4 5 1要分成3段 将其如下分段: ...
- 反素数 Antiprime(信息学奥赛一本通 1625)(洛谷 1463)
题目描述 对于任何正整数x,其约数的个数记作g(x).例如g(1)=1.g(6)=4. 如果某个正整数x满足:g(x)>g(i) 0<i<x,则称x为反质数.例如,整数1,2,4,6 ...
随机推荐
- vue2.0 实现全选和全不选
实现思路: 1. v-model 一个收集所有input(除全选框外)数组checkModel ,vue会动态将其checked为true的input的value值存入数组checkModel里 2 ...
- qsv文件转码mp4格式过程记录
之前帮一个朋友剪辑配音视频,源文件在爱奇艺里,特有的qsv格式让我白忙活一下午. 晚上趁着有空,在网上查找资料,翻阅了很多文件,都让我无从下手. 基本都是一个套路,转成fiv格式,再转mp4格式,但是 ...
- 用app.net Core搞掂多国语言网站
Asp.net Core 中文文档很少,你可以看英文的,不过英文的也是说的有点乱.这篇文章是干货. 1. 配置好你的WebApplication,使他可以支持国际化语言,修改文档Startup.cs ...
- 在SuperMap iDesktop中如何快速追加记录行?
SuperMap iDesktop 产品中,普通数据集右键查看属性表,无法编辑行.是因为要直接在属性表中添加行,只能是纯属性数据集才可用. 除了直接打开数据集,增加几何对象,还有什么办法可以快速追加记 ...
- 无限极分类(adjacency list)的三种方式(迭代、递归、引用)
一般的分类树状结构有两种方式: 一种是adjacency list,也就是是id,parent id这中形式. 另一种是nested set,即左右值的形式. 左右值形式查询起来比较高效,无需递归等, ...
- Windows系统在本地配置一个apache域名的方法
我使用的xampp 1.修改C:\Windows\System32\drivers\etc中的hosts文件,添加127.0.0.1 www.feiquan.com 2.修改D:\xampp\apac ...
- WIN10REALTEL高清音频管理器如何调音?调音无效怎么办?
从win7升级到win10,发现realtel高清音频管理器不能调节高级音响效果了,即使设置也没用. 经过研究后发现是驱动 问题,不是驱动 没有安装,而是可能 没有安装完整,于是下载了驱动精灵,重新安 ...
- windows最简单的局部截图工具
大家写博客的时候应该经常要用截图吧!不知道大家用的都是什么截图工具. 1.最开始我只会键盘的printscreen截图,然后去电脑,附件,画图....总之很多步骤,贼麻烦. 2.然后用电脑玩qq的时候 ...
- pyhton从开始到光棍的day11
纪念我这个开始学python的光棍天,光棍天依旧是函数,这次的函数有个小高级,比昨天的low函数稍微高级点,就是在使用函数中是可以赋值的,比如索引一个值什么的.函数还可以当做参数进行传递,把这个函数名 ...
- jQuery的siblings方法
在使用siblings方法的时候,发现p标签,选中是没有效果的 解决:在w3c中测试也发现是没有效果的,也没有其他的特殊说明,于是度娘之后发现: siblings()获取的是当前标签元素的所有同辈的标 ...