1248:Dungeon Master

时间限制: 1000 ms         内存限制: 65536 KB
提交数: 8637     通过数: 3432

【题目描述】

这题是一个三维的迷宫题目,其中用‘.’表示空地,‘#’表示障碍物,‘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解,每次去队首元素,如果是终点则输出结果移动的次数,否则,从该点开始分别向东南西北上下移动(如果可以走的话)并继续搜,如果到队列为空还没搜到解法,则说明无解。

【分析】

这题是一个三维的迷宫题目,很显然,地图和访问数组都是三维的。方向数组六个方向,除了东南西北,还有上和下。

【参考代码】

#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>using namespace std;const int N=110;
struct node
{int z;int x;int y;int step;
};int l,n,m;
int vis[N][N][N];          //访问数组
char map[N][N][N];         //地图数组
int u[][3]={{1,0,0},{-1,0,0},{0,1,0},{0,-1,0},{0,0,1},{0,0,-1}};  //方向数组 void bfs(node s,node e)
{queue <node> q;bool flag=true;q.push(s);while(!q.empty()){node a=q.front();for(int i=0;i<6;i++){node nw;nw.z =a.z+u[i][0];nw.x =a.x+u[i][1];nw.y =a.y+u[i][2];nw.step =a.step +1;if(nw.z >=0 && nw.z <l && nw.x >=0 && nw.x <n && nw.y >=0 && nw.y <m && (!vis[nw.z][nw.x][nw.y]) && map[nw.z][nw.x][nw.y]=='.'){q.push(nw);vis[nw.z][nw.x][nw.y]=1;if(nw.z==e.z && nw.x==e.x && nw.y==e.y){printf("Escaped in %d minute(s).\n",a.step+1);flag=false;return;}}}q.pop();}if(flag)printf("Trapped!\n");
}
int main()
{while(scanf("%d%d%d",&l,&n,&m)==3,l+n+m){node s,e;memset(vis,0,sizeof(vis));for(int k=0;k<l;k++)for(int i=0;i<n;i++)scanf("%s",map[k][i]);for(int k=0;k<l;k++){for(int i=0;i<n;i++){for(int j=0;j<m;j++){if(map[k][i][j]=='S'){s.z=k;s.x=i;s.y=j;s.step=0;}if(map[k][i][j]=='E'){e.z=k;e.x=i;e.y=j;map[k][i][j]='.';}}}}bfs(s,e);}return 0;
}

http://ybt.ssoier.cn:8088/problem_show.php?pid=1248

信息学奥赛一本通(1248:Dungeon Master)相关推荐

  1. 信息学奥赛一本通 1248:Dungeon Master | OpenJudge NOI 2.5 1253:Dungeon Master

    [题目链接] ybt 1248:Dungeon Master OpenJudge NOI 2.5 1253:Dungeon Master [题目翻译] 地牢城主 描述 你被困在一个3D地牢中,需要找到 ...

  2. 信息学奥赛一本通 (C++)上机练习

    信息学奥赛一本通(C++)上机练习 此书为娃儿的第一本刷题书.娃儿现在四年级 ,希望他能坚持下来.特开贴加油 luogu: disangan223 第一部分 C++语言 第一章 C++语言入门 T10 ...

  3. 信息学奥赛一本通(基础算法与数据结构-题解汇总目录)

    信息学奥赛一本通(C++版)在线评测系统 基础(二)基础算法   更新中...... 第一章高精度计算 1307[例1.3]高精度乘法 1308[例1.5]高精除 1309[例1.6]回文数(Noip ...

  4. 信息学奥赛一本通_长乐一中老师演绎“奥赛传奇”

    董永建(右一)在课堂上. 台海网5月14日讯 据福州晚报报道,长乐一中有一位"传奇"老师--15年来,他辅导的学生在全国高中生信息学奥赛中获金牌3人次.银牌3人次.铜牌5人次:在全 ...

  5. 信息学奥赛一本通 提高篇 第5章 矩阵乘法

    例1 矩阵AXB 信息学奥赛一本通(C++版)在线评测系统 [矩阵乘法]矩阵A×B_Uletay-CSDN博客 矩阵乘法--矩阵A×B_vina的博客-CSDN博客 一本通1641[例 1]矩阵 A× ...

  6. 《信息学奥赛一本通提高篇》第6章 组合数学

    例1 计算系数(NOIP2011提高) 信息学奥赛一本通(C++版)在线评测系统 NOIP2011计算系数_nanhan27的博客-CSDN博客 「NOIP2011」 计算系数 - 组合数_TbYan ...

  7. 《信息学奥赛一本通 提高篇》

    提高篇 第一部分 基础算法 第1章 贪心算法 提高篇 第一部分 基础算法 第1章 贪心算法_青少年趣味编程-CSDN博客 提高篇 第一部分 基础算法 第1章 贪心算法 提高篇 第一部分 基础算法 第1 ...

  8. 信息学奥赛一本通 提高篇 第一部分 基础算法 第2章 二分与三分

    信息学奥赛一本通 提高篇 提高版 第一部分 基础算法 第2章 二分与三分 信息学奥赛一本通 提高篇 提高版 第一部分 基础算法 第2章 二分与三分_mrcrack的博客-CSDN博客_信息学奥赛一本通 ...

  9. 信息学奥赛一本通 提高篇 第六部分 数学基础 相关的真题

    第1章   快速幂 1875:[13NOIP提高组]转圈游戏 信息学奥赛一本通(C++版)在线评测系统 第2 章  素数 第 3 章  约数 第 4 章  同余问题 第 5 章  矩阵乘法 第 6 章 ...

  10. 信息学奥赛一本通 1080:余数相同问题 2022.1.29 AC

    http://ybt.ssoier.cn:8088/show_source.php?runid=14630195 /* 信息学奥赛一本通 1080:余数相同问题 2022.1.29 AC http:/ ...

最新文章

  1. 【python】 字符串转小写(含汉字等时仍work)
  2. Asp程序做页面的301跳转,使得cnasda.com跳转到www.cnasda.com
  3. MySQL安装错误: unknown option '--skip-federated'
  4. windows server 2003 出错提示请求的资源在使用中解决方案
  5. 【opencv学习】ROI区域和图像填充
  6. c#结合emgucv进行人脸检测_Python实时人脸识别/替换
  7. php关于apache配置,关于PHP和apache的配置
  8. 使用Python编写自己的个人密码管理器
  9. string返回第n个字符_Programming in Lualua学习第13期 Lua字符串库
  10. (转)200亿美元比特币找不到主人,这个邪恶职业一夜爆火
  11. Linux kernel tick发起调度软中断函数调用图
  12. 安装驱动省心办法:驱动总裁
  13. 图元变形lisp源码_CAD lisp 实用小程序(源代码)
  14. ansys16.0安装教程
  15. appium java模拟微信登录,使用Appium 测试微信小程序和微信公众号方法
  16. 四级英语测试软件,英语四级必备软件推荐
  17. 什么是冲激函数、时域卷积、冲激响应以及频响曲线
  18. 数字孪生助力智慧城市智能化发展
  19. 2007年浙江高考满分作文——行走在消逝中
  20. Linux虚拟主机与Windows虚拟主机之间有什么区别

热门文章

  1. JavaScript高级程序设计读书笔记(一)
  2. 无限式查找-----2013年2月28日
  3. EnterpriseLibrary数据访问(3)加密连接信息
  4. vmware下ubuntu重启后不能上网
  5. FreeRTOS调度器挂起与解除
  6. python面向对象的概念_Python面向对象概念和三要素
  7. 面试基操:MQ怎么保障消息可靠性?
  8. 程序员面试的 3 大反面案例!看灯大侠最可怜!
  9. 阿里资深技术专家崮德:8 个影响我职业生涯的重要技能
  10. 设置Java JDK的默认编码为UTF-8