/**
***= =最近懒得没有发表一篇文章,自觉羞愧...于是发表几篇小文以弥胡哥对我的期盼之情...
翻译一下: 一个房间,3维的,指定他的3个维度的大小,然后指定他的每个单位的内容(= =w 天哪poj你好烦),#代表该单位无法通过,.代表可以通过,S代表可怜的主人公所在位置,E代表光明的出口所在的位置。求该主人公能否逃脱,能在最少多少次的操作后逃脱(话说这题翻译过来是地下城...好吧,槽点略多)
描述
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!
*/
#include<iostream>
#include<string.h>
#include<string>
#include<queue>
using namespace std;
//
class Point{
public:
Point(int x,int y,int z){
this->x = x;
this->y = y;
this->z = z;
}
bool equals(Point p){
return (x==p.x && y==p.y && z==p.z);
}
int x;
int y;
int z;
};
void test(int L,int R,int C){
if(L<=30 && R<=30 && C<=30){//万恶的英语,题目limit to是<=的意思
int ROOM[L][R][C];
int NUMofS = 0;//S的个数
int NUMofE = 0;//E的个数
bool able = true;//此属性决定了该输入能否进行,包含了格式输出错误,个数错误等情况
int x0,y0,z0;//主人公的位置
int x1,y1,z1; //出口的位置
string s;
memset(ROOM,0,sizeof(ROOM));//将所有的内容都赋予0值
for(int i = 0;i < L;i++){
for(int j = 0;j < R;j++){
cin>>s;
if(s.length()>C)able = false;
for(int k = 0;k < C;k++){
char ch = s.at(k);//通过输入的字符来决定该位置的内容值
switch(ch){
case '#' :
ROOM[i][j][k] = -1;//-1即无法通过
break;
case '.' ://可以通过,默认为0
break;
case 'S' :
x0 = i;
y0 = j;
z0 = k;
NUMofS++;
if(NUMofS>1)
able = false;
break;
case 'E' :
x1 = i;
y1 = j;
z1 = k;
NUMofE++;
if(NUMofE>1)
able = false;
break;
default :
able = false;
}
}
}
}
if(able == false){//感觉题目设置的不严谨,因为输入格式错误的话,题目没有说明要怎么解决,不过经过多次的wa测试,上述情况应该输出无法通过的语句
cout<<"Trapped!"<<endl;
return;
}
Point from(x0,y0,z0);
Point to(x1,y1,z1);
queue<Point> p;
p.push(from);
while(!p.empty()){
Point xp = p.front();
p.pop();
if(xp.equals(to)){//搜到了相同的点就输出
cout<<"Escaped in "<<ROOM[to.x][to.y][to.z]<<" minute(s)."<<endl;
return;
}else{
for(int i = 0;i < 6;i++){
switch(i){
case 0 ://x方向-1
if(xp.x-1>=0 && !ROOM[xp.x-1][xp.y][xp.z]){
Point np(xp.x-1,xp.y,xp.z);
if(!np.equals(from)){
p.push(np);
ROOM[np.x][np.y][np.z] = ROOM[xp.x][xp.y][xp.z]+1;
}
}
break;
case 1 ://x方向+1
if(xp.x+1<L && !ROOM[xp.x+1][xp.y][xp.z]){
Point np(xp.x+1,xp.y,xp.z);
if(!np.equals(from)){
p.push(np);
ROOM[np.x][np.y][np.z] = ROOM[xp.x][xp.y][xp.z]+1;
}
}
break;
case 2 ://y方向-1
if(xp.y-1>=0 && !ROOM[xp.x][xp.y-1][xp.z]){
Point np(xp.x,xp.y-1,xp.z);
if(!np.equals(from)){
p.push(np);
ROOM[np.x][np.y][np.z] = ROOM[xp.x][xp.y][xp.z]+1;
}
}
break;
case 3 ://y方向+1
if(xp.y+1<R && !ROOM[xp.x][xp.y+1][xp.z]){
Point np(xp.x,xp.y+1,xp.z);
if(!np.equals(from)){
p.push(np);
ROOM[np.x][np.y][np.z] = ROOM[xp.x][xp.y][xp.z]+1;
}
}
break;
case 4 ://z方向-1
if(xp.z-1>=0 && !ROOM[xp.x][xp.y][xp.z-1]){
Point np(xp.x,xp.y,xp.z-1);
if(!np.equals(from)){
p.push(np);
ROOM[np.x][np.y][np.z] = ROOM[xp.x][xp.y][xp.z]+1;
}
}
break;
case 5 ://z方向+1
if(xp.z+1<C && !ROOM[xp.x][xp.y][xp.z+1]){
Point np(xp.x,xp.y,xp.z+1);
if(!np.equals(from)){
p.push(np);
ROOM[np.x][np.y][np.z] = ROOM[xp.x][xp.y][xp.z]+1;
}
}
break;
default :
cout<<"Trapped!"<<endl;
return;
}
}
}
}
cout<<"Trapped!"<<endl;
}
}
int main(){
int L,R,C;
cin>>L>>R>>C;
while(L&&R&&C){
test(L,R,C);
cin>>L>>R>>C;
}
return 0;
}
相关推荐
C++程序设计大作业-飞机订票系统的设计与实现源码+程序设计文档C++程序设计大作业-飞机订票系统的设计与实现源码+程序设计文档C++程序设计大作业-飞机订票系统的设计与实现源码+程序设计文档C++程序设计大作业-飞机...
C++程序设计大作业可视化小程序“扫雷”的实现源码C++程序设计大作业可视化小程序“扫雷”的实现源码C++程序设计大作业可视化小程序“扫雷”的实现源码C++程序设计大作业可视化小程序“扫雷”的实现源码C++程序设计...
程序设计大作业基于Qt实现的联网对战不围棋源码.zip程序设计大作业基于Qt实现的联网对战不围棋源码.zip程序设计大作业基于Qt实现的联网对战不围棋源码.zip程序设计大作业基于Qt实现的联网对战不围棋源码.zip程序设计...
c语言程序设计作业,基于原神和碧蓝航线实现的抽卡模拟器.zipc语言程序设计作业,基于原神和碧蓝航线实现的抽卡模拟器.zipc语言程序设计作业,基于原神和碧蓝航线实现的抽卡模拟器.zipc语言程序设计作业,基于原神和...
浙大 2013 Web程序设计 离线作业
微信小程序源码-毕业设计期末大作业课程设计源码 微信小程序源码-毕业设计期末大作业课程设计源码 微信小程序源码-毕业设计期末大作业课程设计源码 微信小程序源码-毕业设计期末大作业课程设计源码 微信小程序源码-...
东北大学-NEU-高级Java程序设计-Java作业,这个是高级Java程序设计的作业, 1.自定义高度打印三角形 2.自定义异常,捕获并打印三角形 3.实现一个简单的画板并写入到文件中,实现多态,能够从文件中读取写入的对象。...
软件设计模式大作业 本资源为一份完整的软件设计模式大作业,涵盖了六...本资源为一份完整的软件设计模式大作业,涵盖了六种设计模式的应用,展示了蛋糕订购系统的设计和实现过程,提供了一个完整的软件设计模式示例。
1.项目代码功能经验证ok,确保稳定可靠运行。欢迎下载使用!在使用过程中,如有问题或建议,请及时私信沟通,帮助解答。...基于C++设计实现的歌词轮播系统源码+详细注释+exe可执行程序(课程作业).zip
《谭浩强C语言程序设计第五版》是学习C语言的经典教材,旨在帮助初学者掌握C语言编程的基础知识。本书不仅适用于大一学生,也适合自学者。在本章中,我们将深入探讨C语言程序设计的基本概念和核心知识点。 1.1 程序...
张玉生编写的《C语言程序设计》双色版是一本针对初学者的C语言理论教材,它包括了C语言的基础知识、语法结构、数据类型、控制结构、函数、指针、数组、字符串等核心技术内容。该教材不仅适合自学,同时也适合作为...
根据给定的信息,本文将详细解释如何在单道处理系统中实现作业调度模拟程序,并针对先来先服务(First-Come First-Served, FCFS)、最短作业优先(Shortest Job First, SJF)、响应比高者优先(Highest Response ...
C++程序设计 扫描版,谭浩强编著,清华大学出版社,2004年6月第一版。 注意:其他两卷在本网页下面我的其它资源里可以找到 内容简介 C++是近年来国内外广泛使用的现代计算机语言,它既支持面向过程的程序设计,也...
总的来说,《钱能-C++程序设计教程习题答案》是学习C++的重要辅助资料,它可以帮助你巩固理论知识,提升编程技能,为你的编程之路打下坚实基础。无论你是自学还是在课堂上学习,都应该充分利用这样的资源,将理论与...
### Windows程序设计_第5版珍藏版.pdf #### 知识点概览: 1. **书籍概述**:《Windows程序设计(第5版 珍藏版)》是一部经典的Windows编程指南,自出版以来已经帮助近50万名Windows程序员入门并成长为技术专家。 2...
WPF程序设计指南(最全-清晰PDF中文版-附源码) (文件太大,分成三个部分) 跟随Windows大师Charles Petzold学习新一代Windows客户端接口程序设计 Windows Presentation Foundation(WPF)是微软.NET Fmmework 3.0...
有关状态机设计方面的书籍,我这里隆重推荐一本:《Practical Statecharts in C/C++ Quantum Programming for Embedded Systems》,中文名叫做《嵌入式系统的微模块化程序设计-实用状态图C/C++实现》,北航出版的,...
这本书《GDI+程序设计》显然是一个深入探讨GDI+技术的教程,它可能包含了GDI+的基础概念、核心组件、实例解析和实践代码。通过阅读这本书,开发者可以了解到如何利用GDI+来构建图形用户界面,进行图像处理,以及创建...
《POSIX多线程程序设计》深入描述了IEEE的开放系统接口标准——POSIX线程,通常称为Pthreads标准。本书首先解释了线程的基本概念,包括异步编程、线程的生命周期和同步机制;然后讨论了一些高级话题,包括属性对象、...
《基于微信小程序点餐系统的设计与实现》 随着信息技术的快速发展,互联网已深入人们生活的各个领域,其中,餐饮行业的数字化转型尤为明显。微信小程序作为移动应用的一种轻量化形式,为餐饮业提供了便捷的线上点餐...