1248:Dungeon Master/P2360 地下城主
1248:Dungeon Master
时间限制: 1000 ms 内存限制: 65536 KB
提交数: 10942 通过数: 4388
【题目描述】
这题是一个三维的迷宫题目,其中用‘.’表示空地,‘#’表示障碍物,‘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解,每次去队首元素,如果是终点则输出结果移动的次数,否则,从该点开始分别向东南西北上下移动(如果可以走的话)并继续搜,如果到队列为空还没搜到解法,则说明无解。
P2360 地下城主
提交5.22k
通过1.67k
时间限制1.00s
内存限制125.00MB
提交答案加入题单
复制题目
题目提供者NIatraucthoi
难度普及-
历史分数100
提交记录 查看题解
标签
查看算法标签
进入讨论版
相关讨论
查看讨论
推荐题目
查看推荐
洛谷推荐关闭
展开
题目描述
你参加了一项秘密任务,在任务过程中你被困在了一个3D的地下监狱里面,任务是计时的,你现在需要在最短的时间里面从地牢里面逃出来继续你的任务。地牢由若干层组成,每一层的形状都是长宽一样的矩形,地牢被分成了若干小格,当小格没有被岩石所占据时,你可以前往所在小格的前方,后方,左方,右方,上层,下层的小格。每走一小格花费一分钟时间。
你能不能顺利的从地牢里面逃出来呢?如果可以,那所需要的最短时间又是多少呢?
//据说出口藏有神器。
输入格式
第一行输入L R C(L为地牢的层数,R为每层小格的行数,C为每层小格的列数,其中1<=L,R,C<=30)。
第二行开始输入L层地牢的格局,每一层有R行,每行有C个小格,两层地牢中间有空行隔开。
输入的文件中,“S”代表你的起始点,“E”代表你所要到达的出口,“#”为小格被岩石占据,“.”表示没有被岩石占据。
输出格式
输出包含一行,当你可以顺利到达出口时请输出:
“Escaped in x minute(s).”,x代表你所花费的最短时间;
否则请输出:“Trapped!”。
输入输出样例
输入 #1复制
3 4 5 S.... .###. .##.. ###.###### ##### ##.## ##...##### ##### #.### ####E
输出 #1复制
Escaped in 11 minute(s).
说明/提示
来源:POJ 2251
【AC代码】
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e5+30000;
const int M=50;
const int INF=0x3f3f3f3f;
inline int read()
{char ch=getchar();int n=0,m=1;while(ch<'0'||ch>'9'){if(ch=='-')m=-1;ch=getchar();}while(ch>='0'&&ch<='9')n=(n<<3)+(n<<1)+ch-48,ch=getchar();return n*m;
}
void write(int n)
{if(n>9)write(n/10);putchar(n%10+'0');
}
int dir[6][3]={{1,0,0},{-1,0,0},{0,-1,0},{0,1,0},{0,0,-1},{0,0,1}},head=1,tail,sx,sy,sz,h,r,c;
struct point
{int px,py,pz,pt;
}q[N];
char m[M][M][M];
bool vis[M][M][M];
void bfs(int tx,int ty,int tz,int tt)
{vis[tx][ty][tz]=1;q[++tail].px=tx,q[tail].py=ty,q[tail].pz=tz,q[tail].pt=tt;while(head<=tail){point p=q[head];head++;if(m[p.px][p.py][p.pz]=='E'){cout<<"Escaped in "<<p.pt<<" minute(s).\n";return;}for(int i=0;i<6;i++){int nx=p.px+dir[i][0],ny=p.py+dir[i][1],nz=p.pz+dir[i][2];if(nx>0&&nx<=h&&ny>0&&ny<=r&&nz>0&&nz<=c&&m[nx][ny][nz]!='#'&&vis[nx][ny][nz]==0)vis[nx][ny][nz]=1,q[++tail].px=nx,q[tail].py=ny,q[tail].pz=nz,q[tail].pt=p.pt+1;}}cout<<"Trapped!\n";
}
int main(int argc,char **argv)
{while(cin>>h>>r>>c&&h*r*c!=0){memset(vis,0,sizeof vis);memset(m,'\0',sizeof m);head=1,tail=0;for(int i=1;i<=h;i++){for(int j=1;j<=r;j++){for(int k=1;k<=c;k++){cin>>m[i][j][k];if(m[i][j][k]=='S')sx=i,sy=j,sz=k;}}}bfs(sx,sy,sz,0);}return 0;
}
1248:Dungeon Master/P2360 地下城主相关推荐
- Dungeon Master(地下城主)
测题链接 题意:给出a,b,c,表示一个三维的一个地牢,起始点'S',终点'E',若能成功逃出,输出最小步数,否则输出Trapped..被陷入困境,六个方向可以移动,分别是东南西北上下,'#'表示石头 ...
- P2360 地下城主
题目 你参加了一项秘密任务,在任务过程中你被困在了一个3D的地下监狱里面,任务是计时的,你现在需要在最短的时间里面从地牢里面逃出来继续你的任务.地牢由若干层组成,每一层的形状都是长宽一样的矩形,地牢被 ...
- 信息学奥赛一本通 1248:Dungeon Master | OpenJudge NOI 2.5 1253:Dungeon Master
[题目链接] ybt 1248:Dungeon Master OpenJudge NOI 2.5 1253:Dungeon Master [题目翻译] 地牢城主 描述 你被困在一个3D地牢中,需要找到 ...
- 信息学奥赛一本通(1248:Dungeon Master)
1248:Dungeon Master 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 8637 通过数: 3432 [题目描述] 这题是一个三维的迷宫题目 ...
- Dungeon Master(地牢大师、底下城主)三维bfs
1253:Dungeon Master(地牢大师.底下城主) 要敢于变通 和普通bfs的区别,仅仅在于数组开三维+搜索方向多了上下(现在的搜索方向是 上下东南西北) bfs多组输入要记得清空队列 // ...
- 1248:Dungeon Master
1248:Dungeon Master 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 11012 通过数: 4403 [题目描述] 这题是一个三维的迷宫题 ...
- B - Dungeon Master POJ - 2251
B - Dungeon Master POJ - 2251 题目: 逃离3D迷宫,n <=30 首先是dfs,算一下最坏情况共30层,每层有30*30的循环, 复杂度 3030*30 显然严重爆 ...
- POJ 2251 Dungeon Master(三维BFS求最短路径)
3D dungeon 时间限制: 1 Sec 内存限制: 128 MB 提交: 2 解决: 2 [提交][状态][讨论版][命题人:201506020829][Edit] [TestData] 题 ...
- Dungeon Master 地下城大师(BFS进阶)
题目链接:2251 -- Dungeon Master 知道你看不懂题(手动滑稽):友情链接. 题意:找到从S到E的最少步数的路径,输出该步数,不过有意思的是这个类似迷宫问题不是二维的,是一个三维迷宫 ...
最新文章
- ext2.2打造全新功能grid系列--仅仅动态生成GridPanel
- 魅族16Android版本,丝滑流畅?魅族16即将适配MIUI10/安卓9系统
- Vue.js的计算属性
- 推行CMMI能在哪些方面为软件企业带来好处?
- 机器学习实现计算不规则图形面积_【名师课堂】苏教数学五年级上2.11校园绿地面积...
- c语言数字钟课程设计报告,c语言实现电子时钟_课程设计.doc
- 《手机屏幕》参数与选择
- 详解Haar特征与AdaBoost方法原理
- PHP实现图片转字符画
- “钱妈妈”平台犯罪嫌疑人被抓捕 涉嫌非法吸收公众存款
- C语言中u8 u16 u32含义,有关stm32的问题,程序里面的u8、u16这些是什么意思啊
- 量化交易入门阶段——MACD的背离用法(一)——DIFF背离
- 分区丢失了数据怎么恢复
- Varian OBI几个奇葩之处
- MySQL--eq_range_index_dive_limit参数学习
- 广东计算机考试只能在学校报名吗,广东省计算机等级考试报名考点名单
- Video标签上面覆盖播放按钮点击播放
- Mysql 使用企业级MEB进行数据库物理备份与恢复
- Java图形化界面---进度条
- 叮叮获取所有用户信息_钉钉如何获取员工位置?