算法:广搜;

描述 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的更多相关文章

  1. nyoj 353 3D dungeon

    3D dungeon 时间限制:1000 ms  |  内存限制:65535 KB 难度:2   描述 You are trapped in a 3D dungeon and need to find ...

  2. NYOJ353 3D dungeon 【BFS】

    3D dungeon 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描写叙述 You are trapped in a 3D dungeon and need to find ...

  3. NYOJ--353--bfs+优先队列--3D dungeon

    /* Name: NYOJ--3533D dungeon Author: shen_渊 Date: 15/04/17 15:10 Description: bfs()+优先队列,队列也能做,需要开一个 ...

  4. NYOJ 353 3D dungeon 【bfs】

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

  5. POJ 2251 Dungeon Master(3D迷宫 bfs)

    传送门 Dungeon Master Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 28416   Accepted: 11 ...

  6. poj 2251 Dungeon Master

    http://poj.org/problem?id=2251 Dungeon Master Time Limit: 1000MS   Memory Limit: 65536K Total Submis ...

  7. Dungeon Master 分类: 搜索 POJ 2015-08-09 14:25 4人阅读 评论(0) 收藏

    Dungeon Master Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 20995 Accepted: 8150 Descr ...

  8. Dungeon Master bfs

    time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u POJ 2251 Descriptio ...

  9. 暑假集训(1)第三弹 -----Dungeon Master(Poj2251)

    Description You are trapped in a 3D dungeon and need to find the quickest way out! The dungeon is co ...

随机推荐

  1. ubuntu后台运行命令行

    ubuntu 程序后台运行几个方法 . 程序后加上“&” ,即 “./myjob &”, 将命令放入到一个作业队列中,可以用命令“jobs” 查看 . 将1中的命令放在 “()”中, ...

  2. 调用API函数,在窗口非客户区绘图(通过GetWindowDC获得整个窗口的DC,就可以随意作画了)

    http://hi.baidu.com/3582077/item/77d3c1ff60f9fa5ec9f33754 调用API函数,在窗口非客户区绘图 GDI+的Graphics类里有个FromHdc ...

  3. 教你如何用Qt做透明的窗体,setMask, Opacity

    // In this function, we can get the height and width of the current widgetvoid Widget::resizeEvent(Q ...

  4. BZOJ1677: [Usaco2005 Jan]Sumsets 求和

    1677: [Usaco2005 Jan]Sumsets 求和 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 570  Solved: 310[Submi ...

  5. QR分解

        从矩阵分解的角度来看,LU和Cholesky分解目标在于将矩阵转化为三角矩阵的乘积,所以在LAPACK种对应的名称是trf(Triangular Factorization).QR分解的目的在 ...

  6. HPROF学习

    抓取HPROF log 1. GUI 可以通过 adt-bundle-windows-x86_64-20140702\sdk\tools\monitor.bat来抓取. 打开软件,选中相应的包,比如“ ...

  7. P - 奔小康赚大钱 - hdu 2255(带权值的匹配)

    分析:这是一个KM的模板题,也就不多说了,KM最复杂的情况都能过,下面是没有优化过的代码: ****************************************************** ...

  8. C#中DataTable行转列示例

    将下面表(1)格式的数据转换为表(2)格式的数据.很明显,这是一个行转列的要求,本想在数据库中行转列,因为在数据库中行转列是比较简单的,方法可以参考本站SQLServer中(行列转换)行转列及列转行且 ...

  9. Firefox中firebug和xpath checker工具的使用

    一直想把自己这段时间做的东西整理下,确迟迟没有动手,现在信息抽取工作已经做的差不多,把自己感觉很好用的两个工具介绍给大家吧!    Firefox真是一个好东西,它许多插件.本人是很讨厌插件的,每次电 ...

  10. intent的startActivityForResult()方法

      /******************************************************************************************** * au ...