描述 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 5 S.... .###. .##.. ###.# ##### ##### ##.## ##... ##### ##### #.### ####E 1 3 3 S## #E# ### 0 0 0

样例输出

 

Escaped in 11 minute(s). Trapped!

该题大意:给一个多层地图,#为墙,从S出发走到E处,若能输出最短时间(每次只能上下左右,上一层,下一层移动,一次1分钟),若不能则输出Trapped!。

思路:可以理解成可向6个方向走的bfs,用3位数组存储地图。(还是需要勤加练习啊,实在是菜到家了)。

代码如下:

#include<stdio.h>
#include<iostream>
#include<queue>
#include<string.h>
using namespace std;
char a[100][100][100];
int vis[100][100][1000];//访问数组,判断是否访问过
int k,n,m,i,j,h;
int f[6][3]={{0,1,0},{0,0,1},{0,-1,0},{0,0,-1},{-1,0,0},{1,0,0}};//6个可走的方向
struct node
{int x,y,z,t;
} s,em;
int bfs(int x1,int y1,int z1,int t)
{queue<node>q;s.x=x1;s.y=y1;s.z=z1;vis[x1][y1][z1]=1;s.t=t;q.push(s);while(!q.empty()){s=q.front();q.pop();for(i=0;i<6;i++){em.x=s.x+f[i][0];em.y=s.y+f[i][1];em.z=s.z+f[i][2];if(em.x>=0&&em.x<k&&em.y>=0&&em.y<n&&em.z>=0&&em.z<m&&vis[em.x][em.y][em.z]==0&&a[em.x][em.y][em.z]!='#')//判别下一步的条件{em.t=s.t+1;if(a[em.x][em.y][em.z]=='E'){return em.t;}vis[em.x][em.y][em.z]=1;//标记已走过改点q.push(em);}}}return -1;
}
int main()
{while(scanf("%d%d%d",&k,&n,&m)!=EOF){if(k==0&&n==0&&m==0){break;}memset(vis,0,sizeof(vis));int x1,y1,z1;for(i=0;i<k;i++){for(j=0;j<n;j++){for(h=0;h<m;h++){cin>>a[i][j][h];//注意:如果用scanf输入需要用getchar吸收回车if(a[i][j][h]=='S'){x1=i;y1=j;z1=h;}}}}int fag;fag=bfs(x1,y1,z1,0);if(fag==-1){printf("Trapped!\n");}else{printf("Escaped in %d minute(s).\n",fag);}}return 0;
}

3D dungeon(BFS)相关推荐

  1. NYOJ 353 3D dungeon 【bfs】

    题意:给你一个高L长R宽C的图形.每个坐标都能够视为一个方格.你一次能够向上.下.左,右,前,后任一方向移动一个方格, 可是不能向有#标记的方格移动. 问:从S出发能不能到达E,假设能请输出最少的移动 ...

  2. Dungeon Master(bfs)广度优先搜索

    描述 You are trapped in a 3D dungeon and need to find the quickest way out! The dungeon is composed of ...

  3. 简单搜索poj2251 3D迷宫(三维迷宫)

    # poj --2251 三维迷宫传送门 Description You are trapped in a 3D dungeon and need to find the quickest way o ...

  4. Dungeon Master——BFS

    [题目描述] You are trapped in a 3D dungeon and need to find the quickest way out! The dungeon is compose ...

  5. OpenCV中的姿势估计及3D效果(3D坐标轴,3D立方体)绘制

    OpenCV中的姿势估计及3D效果(3D坐标轴,3D立方体)绘制 1. 效果图 2. 原理 3. 源码 3.1 姿态估计后绘制3D坐标轴 3.2 姿态估计后绘制立方体 参考 这篇博客将延续上一篇博客: ...

  6. python扫雷 广度优先_Leetcode之广度优先搜索(BFS)专题-529. 扫雷游戏(Minesweeper)...

    Leetcode之广度优先搜索(BFS)专题-529. 扫雷游戏(Minesweeper) BFS入门详解:Leetcode之广度优先搜索(BFS)专题-429. N叉树的层序遍历(N-ary Tre ...

  7. python使用matplotlib可视化3D柱状图(3D histogram、三维柱状图、包含三个坐标轴x、y、z)、设置zdir参数为z、改变3d图观察的角度

    python使用matplotlib可视化3D柱状图(3D histogram.三维柱状图.包含三个坐标轴x.y.z).设置zdir参数为z.改变3d图观察的角度 目录

  8. python使用matplotlib可视化3D柱状图(3D bar plot、三维柱状图、包含三个坐标轴x、y、z)、设置zdir参数为y、改变3d图观察的角度

    python使用matplotlib可视化3D柱状图(3D bar plot.三维柱状图.包含三个坐标轴x.y.z).设置zdir参数为y.改变3d图观察的角度 目录

  9. python使用matplotlib可视化3D直方图(3D histogram、三维直方图、包含三个坐标轴x、y、z)、3D直方图可视化多个维度数据的区别和联系

    python使用matplotlib可视化3D直方图(3D histogram.三维直方图.包含三个坐标轴x.y.z).3D直方图可视化多个维度数据的区别和联系 目录

最新文章

  1. Python将MySQL表数据写入excel
  2. 第七章 移动自动化持续化集成(下)
  3. MATLAB图像函数 块和邻域的处理
  4. latex文档的优点和使用小tips
  5. e-r模型教案高中计算机,《ER模型1》[数据库][计算机]教案.doc
  6. linux perl开发工具,专家推荐 几款常用Perl开发工具
  7. 今天react开发遇到个比较恶心的问题
  8. window下安装scapy
  9. 创建 3D 控件_1.创建控件蓝图
  10. WinRAR软件注册的方法介绍
  11. 【f1c200s/f1c100s】全志f1c200s开发板设计(含原理图和PCB)
  12. ERP项目实施技术要点分析
  13. vscode左侧文件不同颜色标识含义
  14. 【修真院PM小课堂】什么是三种环境?
  15. 海洋cms index.php被修改,海洋CMS(SEACMS)新版本V6.55补丁仍可被绕过执行任意代码...
  16. Camera tuning 基础知识点
  17. CASIA-FASD活体检测库,MSU-MFSD库和NUAA库
  18. 如何恢复计算机我的电脑工具栏,我的电脑工具栏不见了,怎样恢復
  19. 淘宝直播赚佣金项目玩法
  20. Li‘s 影像组学视频学习笔记(25)-查看准确度、灵敏度、特异度及混淆矩阵

热门文章

  1. 【Windows】快捷添加鼠标右键的菜单项
  2. Windows PowerShell简介
  3. 国内ce认证机构有哪些 国内十大CE认证机构排名 做ce认证的公司推荐
  4. 模拟/数字混合信号的电路板布局布线注意事项
  5. 业界最全,阿里云混合云灾备服务上线!
  6. 信道状态信息(CSI)共轭相乘去噪法
  7. List的contains()方法
  8. 信息系统建设服务和能力评估和计算机信息系统集成CS资质的区别
  9. 算数基本定理和代数基本定理
  10. 2023最新SSM计算机毕业设计选题大全(附源码+LW)之java智能物流管理系统k852w