• 【POJ


    Dungeon Master

    直接上中文了

     Descriptions:

    你被困在一个3D地牢中且继续寻找最短路径逃生!地牢由立方体单位构成,立方体单位中有的会充满岩石。向上下前后左右移动一个单位需要一分钟。你不能向对角线的四个方向移动且迷宫四周环绕着许多岩石。 

    是否可以逃出地牢?如果可以,则需要多少时间? 

    Input

    输入的第一行包含一个数,表示地牢的数量。
      每个地牢的描述,其第一行包含三个数L,R和C(均小于等于30)。
      L表示地牢的层数;R和C分别表示每层地牢的行与列的大小。

      随后输入地牢的层数L,每层中包含R行,每行中包含C个字符。
      每个字符表示地牢的一个单元。'#'表示岩石单元,'.'表示空白单元。你的起始位置在点'S',出口为'E'。
      每层地牢的输入后都有一个空行。当L,R和C均为0时,输入结束。

    Output

    每个迷宫对应一行输出。
      如果可以逃生,则输出如下
    Escaped in x minute(s).
      x为最短脱离时间。
      如果无法逃生,则输出如下
    Trapped!

    Sample Input

    3 4 5

    S....

    .###.

    .##..

    ###.#

     

    #####

    #####

    ##.##

    ##...

     

    #####

    #####

    #.###

    ####E

     

     

    1 3 3

    S##

    #E#

    ###

     

     

    0 0 0

    Sample Output

    Escaped in 11 minute(s).

    Trapped!

    题目链接:

    https://vjudge.net/problem/POJ-2251

    最短路bfs,和二维的基本一样,就是原来4个方向,现在6个方向,原来数组是二维,现在是三维,也相当于模板题了

    AC代码

    #include <iostream>
    #include <cstdio>
    #include <fstream>
    #include <algorithm>
    #include <cmath>
    #include <deque>
    #include <vector>
    #include <queue>
    #include <string>
    #include <cstring>
    #include <map>
    #include <stack>
    #include <set>
    #define mod 1000000007
    #define ll long long
    #define INF 0x3f3f3f3f
    using namespace std;
    int sl,sx,sy;
    int el,ex,ey;
    char mp[35][35][35];//记录地图
    int vis[35][35][35];//标记是否走过
    int base[6][3] = { {-1,0,0},{1,0,0},{0,-1,0},{0,1,0},{0,0,-1},{0,0,1} };//六个方向
    int l,r,c;
    struct node
    {
        int f,x,y;//位置
        int step;//步数
        friend bool operator<(node a,node b)//步数小的现出来,即时间少
        {
            return a.step>b.step;//优先队列,步数小的先访问
        }
    };
    priority_queue<node>q;
    /*************************bfs***************************/
    void bfs()
    {
        node p;
        p.f=sl;//初始化
        p.x=sx;
        p.y=sy;
        p.step=0;
        vis[sl][sx][sy]=1;
        q.push(p);
        while(!q.empty())
        {
            node s=q.top();
            q.pop();
            if(s.f==el&&s.x==ex&&s.y==ey)//满足条件
            {
                printf("Escaped in %d minute(s).
    ",s.step);
                return;
            }
                for(int i=0; i<6; i++)//6种走法
                {
                    int tl=s.f+base[i][0];
                    int tx=s.x+base[i][1];
                    int ty=s.y+base[i][2];
                    if(mp[tl][tx][ty]!='#'&&tl>=0&&tl<l&&tx>=0&&tx<r&&ty>=0&&ty<c&&!vis[tl][tx][ty])//判断是否能走
                    {
                        node e;
                        e.f=tl;
                        e.x=tx;
                        e.y=ty;
                        e.step=s.step+1;
                        vis[e.f][e.x][e.y]=1;
                        q.push(e);
                    }
                }
        }
        cout<<"Trapped!"<<endl;
    }
    /**********************************主函数*********************************/
    int main()
    {
        while(cin >> l >> r >>c,l+r+c)
        {
            for(int i=0; i<l; i++)
            {
                for(int j=0; j<r; j++)
                {
                    cin >> mp[i][j];
                    for(int k=0; k<c; k++)
                    {
                        if(mp[i][j][k]=='S')
                            {
                                sl=i;
                                sx=j;
                                sy=k;
                            }
                        if(mp[i][j][k]=='E')
                        {
                            el=i;
                            ex=j;
                            ey=k;
                        }
                    }
                }
            }
            memset(vis,0,sizeof(vis));//每次都要初始化
            bfs();
        }
    }
  • 相关阅读:
    hiho 1483 区间计数问题+二分答案
    Educational Codeforces Round 17 D dp
    Educational Codeforces Round 17 C 二分
    hiho 1461 暴力+随机
    (转)重置Mac OS X管理员密码
    解析Xcode把应用程序打包成ipa---解决打包完新版本itunes提示不是有效应用程序的问题
    SVN权限修复
    MAC安装SVNServer
    设置UIScrollView只可以水平或者竖直滚动
    (转)android之Fragment(官网资料翻译)
  • 原文地址:https://www.cnblogs.com/sky-stars/p/10963418.html
Copyright © 2020-2023  润新知