若不会广搜转向[广搜]

【题目描述】

这题是一个三维的迷宫题目,其中用‘.’表示空地,‘#’表示障碍物,‘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】的更多相关文章

  1. 「SDOI2014」旅行(信息学奥赛一本通 1564)(洛谷 3313)

    题目描述 S国有N个城市,编号从1到N.城市间用N-1条双向道路连接,满足从一个城市出发可以到达其它所有城市.每个城市信仰不同的宗教,如飞天面条神教.隐形独角兽教.绝地教都是常见的信仰. 为了方便,我 ...

  2. 【03NOIP普及组】麦森数(信息学奥赛一本通 1925)(洛谷 1045)

    [题目描述] 形如2P-1的素数称为麦森数,这时P一定也是个素数.但反过来不一定,即如果P是个素数,2P-1不一定也是素数.到1998年底,人们已找到了37个麦森数.最大的一个是P=3021377,它 ...

  3. 【00NOIP普及组】计算器的改良(信息学奥赛一本通 1910)(洛谷 1022)

    [题目描述] NCL是一家专门从事计算器改良与升级的实验室,最近该实验室收到了某公司所委托的一个任务:需要在该公司某型号的计算器上加上解一元一次方程的功能.实验室将这个任务交给了一个刚进入的新手ZL先 ...

  4. 【00NOIP普及组】税收与补贴问题(信息学奥赛一本通 1911)( 洛谷 1023)

    [题目描述] 每样商品的价格越低,其销量就会相应增大.现已知某种商品的成本及其在若干价位上的销量(产品不会低于成本销售),并假设相邻价位间销量的变化是线性的且在价格高于给 定的最高价位后,销量以某固定 ...

  5. 一本通 一笔画问题 洛谷P1636 Einstein学画画

    P1636 Einstein学画画 相信大家都玩过一笔画这种游戏吧,这其实算得上是我们能够接触到的比较常见的数学问题,有一个很知名的就是七桥问题 这个问题包括所有的一笔画问题都是在欧拉回路的涵盖范围内 ...

  6. 【NOI2002】荒岛野人(信息学奥赛一本通 1637)(洛谷 2421)

    题目描述 克里特岛以野人群居而著称.岛上有排列成环行的M个山洞.这些山洞顺时针编号为1,2,…,M.岛上住着N个野人,一开始依次住在山洞C1,C2,…,CN中,以后每年,第i个野人会沿顺时针向前走Pi ...

  7. 【09NOIP提高组】Hankson 的趣味题(信息学奥赛一本通 1856)(洛谷 1072)

    题目描述 Hanks 博士是BT (Bio-Tech,生物技术) 领域的知名专家,他的儿子名叫Hankson.现在,刚刚放学回家的Hankson 正在思考一个有趣的问题.今天在课堂上,老师讲解了如何求 ...

  8. 数列分段II(信息学奥赛一本通 1436)(洛谷 1182)

    [题目描述] 对于给定的一个长度为N的正整数数列A[i],现要将其分成M(M≤N)段,并要求每段连续,且每段和的最大值最小. 关于最大值最小: 例如一数列4 2 4 5 1要分成3段 将其如下分段: ...

  9. 反素数 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 ...

随机推荐

  1. Odoo:全球第一免费开源ERP库龄表的简单实现方法(无需二开)

    问题背景 希望查看库龄超过30天的货物,该如何实现?此种简单数据查询需要二开吗? 解决方案 方法一:Stock Quant列表视图增加过滤器 <filter string="库龄超30 ...

  2. Python-函数小结

    原文出处,如有侵权,请联系删除. 用户自定义.py文件 如果你已经把my_abs()的函数定义保存为abstest.py文件了,那么,可以在该文件的当前目录下启动Python解释器,用from abs ...

  3. QT连接postgreSQL

    这是我之前项目遇到的问题,连接postgreSQL数据库,一直找不到引擎,最后终于找到 原因了,需要程序加载 1.安装postgresql客户端,2.需要配置postgresql客户端的bin和lib ...

  4. 前端开发之基础知识-HTML(一)

    1.1 html概述和基本结构 html概述 HTML是 HyperText Mark-up Language 的首字母简写,意思是超文本标记语言,超文本指的是超链接,标记指的是标签,是一种用来制作网 ...

  5. mysql(mariadb)主从配置

    环境: 内核版本:uname -r 系统版本:cat /etc/redhat-release

  6. AngularJS学习之旅—AngularJS 表单(十六)

    一.AngularJS 表单 AngularJS 表单是输入控件的集合. HTML 控件 以下 HTML input 元素被称为 HTML 控件: input 元素 select 元素 button ...

  7. centos 7 selinux开启关闭

    1 查看selinux状态 [root@localhost ~]# sestatus SELinux status: disabled 2 关闭 零时关闭 [root@localhost ~]# se ...

  8. CentOS6.9安装WordPress搭建自己的博客网站

    首先说明我用的是服务器上之前装的mysql数据库,只需要配置上就行了 准备工作 CentOS6.9 在/目录下创建一个目录src,把下载的东西都放到这个文件夹下 下载Apache Httpd,下载地址 ...

  9. vps install ss

    1.install ss yum install python-setuptools easy_install pip pip install shadowsocks 2.config ss (sin ...

  10. 基于Linux下catalog方式的 Oracle 备份策略(RMAN)

    --********************************** -- 基于Linux下 Oracle 备份策略(RMAN) --******************************* ...