3D dungeon
算法:广搜;
描述 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 <cstring>
#include <queue>
#include <algorithm>
#include <iomanip>
#include <stdio.h>
using namespace std;
char ch[35][35][35];
int n,m,k,x1,x2,y1,y2,z1,z2;
int a[6][3]={1,0,0,-1,0,0,0,1,0,0,-1,0,0,0,1,0,0,-1};
struct dot
{
int x,y,z,step;
} ;
int cmp(int ax,int ay,int az)
{
if(ax>=0&&ax<n&&ay>=0&&ay<m&&az>=0&&az<k&&ch[ax][ay][az]=='.') return 1;
return 0;
}
int bfs()
{
queue<dot>que;
dot cur,loer;
cur.x=x1;cur.y=y1;cur.z=z1;
cur.step=0;
ch[x1][y1][z1]='#';
que.push(cur);
while(que.size())
{
loer=que.front();
que.pop();
if(loer.x==x2&&loer.y==y2&&loer.z==z2)
return loer.step;
for(int i=0;i<6;i++)
{
cur=loer;
cur.x+=a[i][0];
cur.y+=a[i][1];
cur.z+=a[i][2];
if(cmp(cur.x,cur.y,cur.z))
{
ch[cur.x][cur.y][cur.z]='#';
cur.step++;
que.push(cur);
}
}
}
return -1;
}
int main()
{
int i,j,p;
while(cin>>n>>m>>k&&n&&m&&k)
{
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
for(p=0;p<k;p++)
{
cin>>ch[i][j][p];
if(ch[i][j][p]=='S')
{x1=i;y1=j;z1=p;}
if(ch[i][j][p]=='E')
{x2=i;y2=j;z2=p;ch[i][j][p]='.';}
}
}
}
int ans=bfs();
if(ans>=0) cout<<"Escaped in "<<ans<<" minute(s)."<<endl;
else cout<<"Trapped!"<<endl;
}
return 0;
}
3D dungeon的更多相关文章
- nyoj 353 3D dungeon
3D dungeon 时间限制:1000 ms | 内存限制:65535 KB 难度:2 描述 You are trapped in a 3D dungeon and need to find ...
- NYOJ353 3D dungeon 【BFS】
3D dungeon 时间限制:1000 ms | 内存限制:65535 KB 难度:2 描写叙述 You are trapped in a 3D dungeon and need to find ...
- NYOJ--353--bfs+优先队列--3D dungeon
/* Name: NYOJ--3533D dungeon Author: shen_渊 Date: 15/04/17 15:10 Description: bfs()+优先队列,队列也能做,需要开一个 ...
- NYOJ 353 3D dungeon 【bfs】
题意:给你一个高L长R宽C的图形.每个坐标都能够视为一个方格.你一次能够向上.下.左,右,前,后任一方向移动一个方格, 可是不能向有#标记的方格移动. 问:从S出发能不能到达E,假设能请输出最少的移动 ...
- POJ 2251 Dungeon Master(3D迷宫 bfs)
传送门 Dungeon Master Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 28416 Accepted: 11 ...
- poj 2251 Dungeon Master
http://poj.org/problem?id=2251 Dungeon Master Time Limit: 1000MS Memory Limit: 65536K Total Submis ...
- Dungeon Master 分类: 搜索 POJ 2015-08-09 14:25 4人阅读 评论(0) 收藏
Dungeon Master Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 20995 Accepted: 8150 Descr ...
- Dungeon Master bfs
time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u POJ 2251 Descriptio ...
- 暑假集训(1)第三弹 -----Dungeon Master(Poj2251)
Description You are trapped in a 3D dungeon and need to find the quickest way out! The dungeon is co ...
随机推荐
- 移动app测试浅析
移动App测试浅析 1. 移动App测试的现状及其挑战 移动互联网走到今天,App寡头化的趋势已经越来越明显,同时用户的口味越来越高,这对移动App开发者提出了更高的要求.几年前可能你有一个创意,随便 ...
- 转:Centos6.3添加解码器播放MP3和常见视频音频
原文来自于:http://blog.csdn.net/odaynot/article/details/8462273 参考地址: http://wiki.centos.org/AdditionalRe ...
- cursor pin S wait on X
cursor pin S wait on X: 这是10.2版本提出的mutex(互斥)机制用来解决library cache bin latch争夺问题引入的新事件,是否使用这种机制受到隐含参数_k ...
- LINQ to SQLite完美解决方案
1.下载安装LinqConnectExpress(就是LinqConnect免费版) 2.安装好后就和LINQ TO SQL 一样了! 3.查询(增删改查和LINQ TO SQL 完全一样,你可以不 ...
- DLL入门浅析(4)——从DLL中导出类
转载自:http://www.cppblog.com/suiaiguo/archive/2009/07/20/90663.html 前面介绍了怎么从DLL中导出函数和变量,实际上导出类的方法也是大同小 ...
- java NIO的多路复用及reactor模式【转载】
关于java的NIO,以下博客总结的比较详细,适合初学者学习(http://ifeve.com/java-nio-all/) 下面的文字转载自:http://www.blogjava.net/hell ...
- Perl时间处理函数
官方网址:http://search.cpan.org/~stbey/Date-Calc-6.3/lib/Date/Calc.pod#___top use Date::Calc qw( Days_in ...
- 绘图(CGContext)
转自 http://blog.csdn.net/zhenyu5211314/article/details/24230581 0 CGContextRef context = UIGraphicsGe ...
- python_Opencv_绘图
opencv中也可以用一些函数来绘图 直接上源码,例子: # -*- coding: utf-8 -*- import numpy as np import cv2 # 黑色的图片 img=np.ze ...
- 改变和恢复view的方向
self.navigationController.view.transform = CGAffineTransformMakeRotation(M_PI/2); self.navigationCon ...