Dungeon Master(信息学奥赛一本通-T1248)
【题目描述】
这题是一个三维的迷宫题目,其中用‘.’表示空地,‘#’表示障碍物,‘S’表示起点,‘E’表示终点,求从起点到终点的最小移动次数,解法和二维的类似,只是在行动时除了东南西北移动外还多了上下。可以上下左右前后移动,每次都只能移到相邻的空位,每次需要花费一分钟,求从起点到终点最少要多久。
【输入】
多组测试数据。
一组测试测试数据表示一个三维迷宫:
前三个数,分别表示层数、一个面的长和宽,后面是每层的平面图。前三个数据为三个零表示结束。
【输出】
最小移动次数。
【输入样例】
3 4 5
S....
.###.
.##..
###.#
#####
#####
##.##
##...
#####
#####
#.###
####E
1 3 3
S##
#E#
###
0 0 0【输出样例】
Escaped in 11 minute(s).
Trapped!
【源程序】
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<string>
#include<cstdlib>
#include<queue>
#include<vector>
#define INF 0x3f3f3f3f
#define PI acos(-1.0)
#define N 101
#define MOD 2520
#define E 1e-12
using namespace std;
int X,Y,Z;
char a[N][N][N];
bool vis[N][N][N];
int dir[6][3]={{1,0,0},{-1,0,0},{0,1,0},{0,-1,0},{0,0,1},{0,0,-1}};
struct node
{int x;int y;int z;int step;
}q[N*10000];
void bfs(int sx,int sy,int sz,int ex,int ey,int ez)
{int head=1,tail=1;bool flag=true;memset(vis,0,sizeof(vis));vis[sx][sy][sz]=1;q[tail].x=sx;q[tail].y=sy;q[tail].z=sz;q[tail].step=0;tail++;while(head<tail){int x=q[head].x;int y=q[head].y;int z=q[head].z;int step=q[head].step;if(x==ex&&y==ey&&z==ez){flag=false;printf("Escaped in %d minute(s).\n",step);break;}for(int i=0;i<6;i++){int nx=x+dir[i][0];int ny=y+dir[i][1];int nz=z+dir[i][2];if(0<=nx&&nx<X&&0<=ny&&ny<Y&&0<=nz&&nz<Z&&a[nx][ny][nz]=='.'&&vis[nx][ny][nz]==0){vis[nx][ny][nz]=1;q[tail].x=nx;q[tail].y=ny;q[tail].z=nz;q[tail].step=step+1;tail++;}}head++;}if(flag)printf("Trapped!\n");}
int main()
{int sx,sy,sz,ex,ey,ez;while(scanf("%d%d%d",&X,&Y,&Z)!=EOF&&X&&Y&&Z){for(int i=0;i<X;i++)for(int j=0;j<Y;j++)scanf("%s",a[i][j]);for(int i=0;i<X;i++)for(int j=0;j<Y;j++)for(int k=0;k<Z;k++){if(a[i][j][k]=='S'){sx=i;sy=j;sz=k;}if(a[i][j][k]=='E'){ex=i;ey=j;ez=k;a[i][j][k]='.';}}bfs(sx,sy,sz,ex,ey,ez);}return 0;
}
Dungeon Master(信息学奥赛一本通-T1248)相关推荐
- 信息学奥赛一本通 (C++)上机练习
信息学奥赛一本通(C++)上机练习 此书为娃儿的第一本刷题书.娃儿现在四年级 ,希望他能坚持下来.特开贴加油 luogu: disangan223 第一部分 C++语言 第一章 C++语言入门 T10 ...
- 信息学奥赛一本通(基础算法与数据结构-题解汇总目录)
信息学奥赛一本通(C++版)在线评测系统 基础(二)基础算法 更新中...... 第一章高精度计算 1307[例1.3]高精度乘法 1308[例1.5]高精除 1309[例1.6]回文数(Noip ...
- 信息学奥赛一本通_长乐一中老师演绎“奥赛传奇”
董永建(右一)在课堂上. 台海网5月14日讯 据福州晚报报道,长乐一中有一位"传奇"老师--15年来,他辅导的学生在全国高中生信息学奥赛中获金牌3人次.银牌3人次.铜牌5人次:在全 ...
- 信息学奥赛一本通 提高篇 第5章 矩阵乘法
例1 矩阵AXB 信息学奥赛一本通(C++版)在线评测系统 [矩阵乘法]矩阵A×B_Uletay-CSDN博客 矩阵乘法--矩阵A×B_vina的博客-CSDN博客 一本通1641[例 1]矩阵 A× ...
- 《信息学奥赛一本通提高篇》第6章 组合数学
例1 计算系数(NOIP2011提高) 信息学奥赛一本通(C++版)在线评测系统 NOIP2011计算系数_nanhan27的博客-CSDN博客 「NOIP2011」 计算系数 - 组合数_TbYan ...
- 《信息学奥赛一本通 提高篇》
提高篇 第一部分 基础算法 第1章 贪心算法 提高篇 第一部分 基础算法 第1章 贪心算法_青少年趣味编程-CSDN博客 提高篇 第一部分 基础算法 第1章 贪心算法 提高篇 第一部分 基础算法 第1 ...
- 信息学奥赛一本通 提高篇 第一部分 基础算法 第2章 二分与三分
信息学奥赛一本通 提高篇 提高版 第一部分 基础算法 第2章 二分与三分 信息学奥赛一本通 提高篇 提高版 第一部分 基础算法 第2章 二分与三分_mrcrack的博客-CSDN博客_信息学奥赛一本通 ...
- 信息学奥赛一本通 提高篇 第六部分 数学基础 相关的真题
第1章 快速幂 1875:[13NOIP提高组]转圈游戏 信息学奥赛一本通(C++版)在线评测系统 第2 章 素数 第 3 章 约数 第 4 章 同余问题 第 5 章 矩阵乘法 第 6 章 ...
- 信息学奥赛一本通 1080:余数相同问题 2022.1.29 AC
http://ybt.ssoier.cn:8088/show_source.php?runid=14630195 /* 信息学奥赛一本通 1080:余数相同问题 2022.1.29 AC http:/ ...
最新文章
- 语义分割--Attention to Scale: Scale-aware Semantic Image Segmentation
- 什么是启发式?什么是产生式?
- C# DataGridView 的UserDeletingRow事件,删除
- 为什么越来越多的开发者选择使用Spring Boot
- 对比excel,用python绘制柱状图时添加table数据表
- php怎么引用表单元素,表单元素:最全的各种html表单元素获取和使用方法总结...
- 《浪潮之巅》读书笔记2
- Python3.7 Scrapy安装(Windows)
- python多线程文件的数据续传_python实现支持并发、断点续传的Ftp程序
- 机器学习笔记(三)---- 逻辑回归(二分类)
- 11·25发布!OPPO Reno7系列正式官宣:定位高颜值实力派
- DM8168 unrecoverable error: OMX_ErrorBadParameter (0x80001005) [resolved]
- enumerable java_ruby中的Enumerable的使用
- 【廖雪峰官方网站/Java教程】多线程(2)
- 还在用上古的 ls 命令管理文件吗,是时候使用终端文件管理神器 lf 了!
- 第三届“传智杯”全国大学生IT技能大赛(初赛B组)
- 《大型网站技术架构》学习笔记
- phpdesigner 的配置
- wifi设置及一些有趣的应用
- 年会活动必备微信墙3D签到配置教程