zoukankan      html  css  js  c++  java
  • 洛谷 P2360 地下城主

    题目描述

    你参加了一项秘密任务,在任务过程中你被困在了一个3D的地下监狱里面,任务是计时的,你现在需要在最短的时间里面从地牢里面逃出来继续你的任务。地牢由若干层组成,每一层的形状都是长宽一样的矩形,地牢被分成了若干小格,当小格没有被岩石所占据时,你可以前往所在小格的前方,后方,左方,右方,上层,下层的小格。每走一小格花费一分钟时间。

    你能不能顺利的从地牢里面逃出来呢?如果可以,那所需要的最短时间又是多少呢?

    //据说出口藏有神器。

    输入输出格式

    输入格式:

     

    第一行输入L R C(L为地牢的层数,R为每层小格的行数,C为每层小格的列数,其中1<=L,R,C<=30)。

    第二行开始输入L层地牢的格局,每一层有R行,每行有C个小格,两层地牢中间有空行隔开。

    输入的文件中,“S”代表你的起始点,“E”代表你所要到达的出口,“#”为小格被岩石占据,“.”表示没有被岩石占据。

     

    输出格式:

     

    输出包含一行,当你可以顺利到达出口时请输出:

    “Escaped in x minute(s).”,x代表你所花费的最短时间;

    否则请输出:“Trapped!”。

     

    输入输出样例

    输入样例#1: 复制
    3 4 5
    S....
    .###.
    .##..
    ###.#
    
    #####
    #####
    ##.##
    ##...
    
    #####
    #####
    #.###
    ####E
    输出样例#1: 复制
    Escaped in 11 minute(s).

    说明

    来源:POJ 2251

    思路:搜索。

    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    string s;
    int n,m,l;
    int x1,y1,z1;
    int f[10001];
    int be1,be2,be3;
    int en1,en2,en3;
    bool a[31][31][31];
    int tail=1,head,sum;
    int d1[6]={1,-1,0,0,0,0};
    int d2[6]={0,0,-1,1,0,0};
    int d3[6]={0,0,0,0,1,-1};
    int x[10001],y[10001],z[10001];
    int main(){
        cin>>l>>n>>m;
        for(int i=1;i<=l;i++)
            for(int j=1;j<=n;j++){
                cin>>s;
                for(int k=0;k<m;k++){
                    if(s[k]=='.')    a[i][j][k+1]=1;
                    if(s[k]=='S'){ be1=i;be2=j;be3=k+1; }
                    if(s[k]=='E'){ en1=i;en2=j;en3=k+1;a[i][j][k+1]=1; }
                }
            }
        x[tail]=be1;y[tail]=be2;z[tail]=be3;
        while(head<=tail){
            head++;
            for(int i=0;i<6;i++){
                x1=x[head]+d3[i];
                y1=y[head]+d1[i];
                z1=z[head]+d2[i];
                if(a[x1][y1][z1]&&x1>=1&&x1<=l&&y1>=1&&y1<=n&&z1>=1&&z1<=m){
                    tail++;
                    a[x1][y1][z1]=0;
                    x[tail]=x1;
                    y[tail]=y1;
                    z[tail]=z1;
                    f[tail]=head;
                    if(x1==en1&&y1==en2&&z1==en3){
                        while(f[tail]){
                            tail=f[tail];
                            sum++;
                        }
                        cout<<"Escaped in "<<sum<<" minute(s)."<<endl;
                        return 0;
                    }
                }
            }
        }
        cout<<"Trapped!"<<endl;
    }
    细雨斜风作晓寒。淡烟疏柳媚晴滩。入淮清洛渐漫漫。 雪沫乳花浮午盏,蓼茸蒿笋试春盘。人间有味是清欢。
  • 相关阅读:
    LeetCode
    lintcode--剑指offer
    lintcode--剑指offer---41--50道
    LeetCode中的bug!!!!!!
    常用知识点
    lintcode--剑指offer---31--40道
    LeetCode--链表
    Java设计实践课练习题
    lintcode--剑指offer---21--30道
    Java设计实践课的LeetCode题目
  • 原文地址:https://www.cnblogs.com/cangT-Tlan/p/7912357.html
Copyright © 2011-2022 走看看