POJ2251:Dungeon Master(BFS)

来源:互联网 发布:跨语言大数据平台 编辑:程序博客网 时间:2024/04/25 21:43

Description

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?

Input

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.

Output

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!

Sample Input

3 4 5S.....###..##..###.#############.####...###########.#######E1 3 3S###E####0 0 0

Sample Output

Escaped in 11 minute(s).Trapped!
 
简单的BFS,只是把四个方向改成了六个方向罢了
 
#include <iostream>#include <stdio.h>#include <string.h>#include <queue>#include <algorithm>using namespace std;char map[35][35][35];int vis[35][35][35];int k,n,m,sx,sy,sz,ex,ey,ez;int to[6][3] = {{0,0,1},{0,0,-1},{0,1,0},{0,-1,0},{1,0,0},{-1,0,0}};struct node{    int x,y,z,step;};int check(int x,int y,int z){    if(x<0 || y<0 || z<0 || x>=k || y>=n || z>=m)        return 1;    else if(map[x][y][z] == '#')        return 1;    else if(vis[x][y][z])        return 1;    return 0;}int bfs(){    int i;    node a,next;    queue<node> Q;    a.x = sx,a.y = sy,a.z = sz;    a.step = 0;    vis[sx][sy][sz] = 1;    Q.push(a);    while(!Q.empty())    {        a = Q.front();        Q.pop();        if(a.x == ex && a.y == ey && a.z == ez)            return a.step;        for(i = 0; i<6; i++)        {            next = a;            next.x = a.x+to[i][0];            next.y = a.y+to[i][1];            next.z = a.z+to[i][2];            if(check(next.x,next.y,next.z))                continue;            vis[next.x][next.y][next.z] = 1;            next.step = a.step+1;            Q.push(next);        }    }    return 0;}int main(){    int i,j,r;    while(scanf("%d%d%d",&k,&n,&m),n+m+k)    {        for(i = 0; i<k; i++)        {            for(j = 0; j<n; j++)            {                scanf("%s",map[i][j]);                for(r = 0; r<m; r++)                {                    if(map[i][j][r] == 'S')                    {                        sx = i,sy = j,sz = r;                    }                    else if(map[i][j][r] == 'E')                    {                        ex = i,ey = j,ez = r;                    }                }            }        }        memset(vis,0,sizeof(vis));        int ans;        ans = bfs();        if(ans)            printf("Escaped in %d minute(s).\n",ans);        else            printf("Trapped!\n");    }    return 0;}

1 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 手机设置越南文怎么办 电脑没有dvd驱动器怎么办 w7副本不是正版怎么办 win7硬盘速度慢怎么办 光盘装不了系统怎么办 winxp忘记开机密码怎么办 上班心里压力大怎么办 应聘人事没经验怎么办 有了撤药综合症怎么办 贯籍填写错误怎么办 没有想法的人怎么办 蜜蜂越来越少怎么办呢 眯眼睛了怎么办教案 小孩迷眼睛了怎么办 英语怎么办怎么搜题 倒车影像出现cam怎么办 贷款没有固定电话怎么办 公司要调动工作怎么办 不去厂里上班怎么办 我该怎么办英文怎么说 丝质裙子勾丝怎么办 饵料没有拉丝粉怎么办 被辞退了社保怎么办 发现工作不适合自己怎么办 找不到合适的工作怎么办 试用期不想干了怎么办 因为腰疼想调换工作怎么办 笔记本电脑开机出现英文怎么办 ios描述文件失效怎么办 pra抗体一类高怎么办 字段不能为null怎么办 电脑串口被占用怎么办 该卡未初始化怎么办 约好面试去不了怎么办 公司网速被限制怎么办 工地包工头欠钱怎么办 班里有人带钱丢了怎么办? 平安fna降到na怎么办 win10内存占用率过高怎么办 服务员站累了怎么办 会计证书掉了怎么办