#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <fstream>
#include <algorithm>
#include <cmath>
#include <queue>
#include <stack>
#include <vector>
#include <map>
#include <set>
#include <iomanip> using namespace std;
#define maxn 205 int d[][]={{,,},{-,,},{,,},{,-,},{,,},{,,-}};
typedef struct point
{
    int x,y,z;
    int ans;
}point; point p[maxn];
int Map[][][];
bool used[maxn][maxn][maxn]; int x1,x2,y2,z1,z2;
int you;//这里原本是想用y1的,但是在cmath这个函数中y1(y0,yn等)有自己的定义,发生了冲突(如果将cmath删掉,就可以定义了)
int BFS(int l,int n,int m)
{
    int ii,jj,zz;
    int i;
    queue<point>q;
    point temp1,temp2;
    temp1.x=x1;
    temp1.y=you;
    temp1.z=z1;
    temp1.ans=;
    q.push(temp1);
    memset(used, false, sizeof(used));
           used[z1][x1][you]=true;
           while(!q.empty()){
               temp1=q.front();
               q.pop();
               for(i=;i<;i++)
               {
                   ii=temp1.x+d[i][];
                   jj=temp1.y+d[i][];
                   zz=temp1.z+d[i][];
                   if(ii==x2 && jj==y2 && zz==z2)
                   {
                       return temp1.ans+;
                   }
                   if(zz>= && zz<l && ii>= && ii<n && jj>= && jj<m && Map[zz][ii][jj]== && used[zz][ii][jj]==false)
                   {
                       used[zz][ii][jj]=true;
                       temp2.x=ii;
                       temp2.y=jj;
                       temp2.z=zz;
                       temp2.ans=temp1.ans+;
                       q.push(temp2);
                   }
           }
               
     }
    return -;
}
int main()
{
        int l,m,n,i,j,k,key;
        char str[];
        while(cin>>l>>n>>m){
            if(l==&&n==&&m==){
                break;
            }
            memset(Map, , sizeof(Map));
            for(k=;k<l;k++){
                for(i=;i<n;i++){
                    scanf("%s",str);
                    for(j=;j<m;j++){
                        if(str[j]=='#')
                            Map[k][i][j]=;
                        else if(str[j]=='.')
                        {
                            Map[k][i][j]=;
                        }
                        else if(str[j]=='S')
                        {
                            z1=k;
                            x1=i;
                            you=j;
                        }
                        else
                        {
                            z2=k;
                            x2=i;
                            y2=j;
                        }
                    }
                }
            }
            key=BFS(l,n,m);
            if(key==-)
                cout<<"Trapped!"<<endl;
            else
                printf("Escaped in %d minute(s).\n",key);
        }
        return ;
}

三维BFS Poj 2251的更多相关文章

  1. BFS POJ 2251 Dungeon Master

    题目传送门 /* BFS:这题很有意思,像是地下城,图是立体的,可以从上张图到下一张图的对应位置,那么也就是三维搜索,多了z坐标轴 */ #include <cstdio> #includ ...

  2. POJ 2251 Dungeon Master --- 三维BFS(用BFS求最短路)

    POJ 2251 题目大意: 给出一三维空间的地牢,要求求出由字符'S'到字符'E'的最短路径,移动方向可以是上,下,左,右,前,后,六个方向,每移动一次就耗费一分钟,要求输出最快的走出时间.不同L层 ...

  3. POJ.2251 Dungeon Master (三维BFS)

    POJ.2251 Dungeon Master (三维BFS) 题意分析 你被困在一个3D地牢中且继续寻找最短路径逃生.地牢由立方体单位构成,立方体中不定会充满岩石.向上下前后左右移动一个单位需要一分 ...

  4. 【BFS】POJ 2251

    POJ 2251 Dungeon Master 题意:有一个地图,三维,走的方向是上下,左右,前后.问你最小步数从起始点走到出口. 思路:三维的BFS,就是多加一组状态,需要细心(不细心如我就找了半个 ...

  5. poj 2251 Dungeon Master( bfs )

    题目:http://poj.org/problem?id=2251 简单三维 bfs不解释, 1A,     上代码 #include <iostream> #include<cst ...

  6. 【POJ 2251】Dungeon Master(bfs)

    BUPT2017 wintertraining(16) #5 B POJ - 2251 题意 3维的地图,求从S到E的最短路径长度 题解 bfs 代码 #include <cstdio> ...

  7. POJ 2049— Finding Nemo(三维BFS)10/200

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/u013497151/article/details/29562915 海底总动员.... 这个题開始 ...

  8. POJ 2251 Dungeon Master(地牢大师)

    p.MsoNormal { margin-bottom: 10.0000pt; font-family: Tahoma; font-size: 11.0000pt } h1 { margin-top: ...

  9. POJ 2251 Dungeon Master /UVA 532 Dungeon Master / ZOJ 1940 Dungeon Master(广度优先搜索)

    POJ 2251 Dungeon Master /UVA 532 Dungeon Master / ZOJ 1940 Dungeon Master(广度优先搜索) Description You ar ...

随机推荐

  1. Codeforces Round #363 (Div. 2) D. Fix a Tree —— 并查集

    题目链接:http://codeforces.com/contest/699/problem/D D. Fix a Tree time limit per test 2 seconds memory ...

  2. Codeforces Round #371 (Div. 2) C. Sonya and Queries —— 二进制压缩

    题目链接:http://codeforces.com/contest/714/problem/C C. Sonya and Queries time limit per test 1 second m ...

  3. 存储过程系列四: decode函数使用学习

    Oracle 中 decode 函数用法 含义解释:decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值) 该函数的含义如下:IF 条件=值1 THEN RETURN(翻译 ...

  4. ORA-32001:write to SPFILE requested but no SPFILE is in use

    oracle报错: ORA-32001:write to SPFILE requested but no SPFILE is in use 解决方法: 1.查看是否有spfile sql> sh ...

  5. nyoj 269 VF

    VF 时间限制:1000 ms  |  内存限制:65535 KB 链接:NYOJ269 原创在:点击打开链接 题意:1-1000000000之间,各位数字之和等于给定s的数的个数. 每行给出一个数s ...

  6. adb pull / push

    刚才搞了半天想pull,就是pull不成,如图: 看出哪里有问题了吗? 问题就是我不该在shell里面运行adb pull! 正确的做法: 在任意一处打开命令行比如图中的桌面, adb pull /s ...

  7. 洛谷p1007独木桥

    P1007独木桥 题目背景 战争已经进入到紧要时间.你是运输小队长,正在率领运输部队向前线运送物资.运输任务像做题一样的无聊.你希望找些刺激,于是命令你的士兵们到前方的一座独木桥上欣赏风景,而你留在桥 ...

  8. 配置tomcat https的步骤

    keytool -genkey -v -alias tomcat -keyalg RSA -keystore D:\tomcat.keystore -validity 36500 keytool -g ...

  9. JAVA 内部类 (三)实例

    为什么要用内部类:控制框架 一个“应用程序框架”是指一个或一系列类,它们专门设计用来解决特定类型的问题.为应用应用程序框架,我们可从一个或多个类继承,并覆盖其中的部分方法.我们在覆盖方法中编写的代码用 ...

  10. AndroidStudio设置“自动导入包”

    setting –-> Editor –-> General –-> Auto Inport 勾选这两项 单击 Apply –-> ok