Dungeon Master

Posted lngstart

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Dungeon Master相关的知识,希望对你有一定的参考价值。

原题链接

题解

一个三维的bfs,直接向6个方向走就是了,直接套模板

#include <iostream>
#include <algorithm>
#include <queue>

using namespace std;

typedef struct node{
    int x, y, z;
    node(int a, int b, int c){
        x = a, y = b, z = c;
    }
};

int dx[6]={1,-1,0,0,0,0}, dy[6]={0,0,1,-1,0,0},dz[6]={0,0,0,0,1,-1};
char g[32][32][32];
int st[32][32][32];

int l,r,c;

int main(){

    while(cin >> l >> r >> c){
        int x, y, z;
        int ex, ey, ez;
        if(l == 0 && r == 0 && c == 0) break;

        for(int i = 0; i < l; ++i){
            for(int j = 0; j < r; ++j){
                for(int k = 0; k < c; ++k){
                    cin >> g[i][j][k];
                    if(g[i][j][k] == ‘S‘) x = i, y = j, z = k;
                    if(g[i][j][k] == ‘E‘) ex = i, ey = j, ez = k;
                    st[i][j][k] = -1;
                }
            }
        }

        queue<node> q;
        q.push(node(x, y, z)); st[x][y][z] = 0;

        while(q.size()){
            node t = q.front(); q.pop();
            //感觉这条语句放进下面中要更好,直接找到了就直接退出
            if(t.x == ex && t.y == ey && t.z == ez) break;//表示的终点在队列中,所以下面的判定中当点为终点是也要把点加进来
            for(int i = 0; i < 6; ++i){
                x = t.x + dx[i];
                y = t.y + dy[i];
                z = t.z + dz[i];
                if(x >= 0 && x < l && y >= 0 && y < r && z >= 0 && z < c && (g[x][y][z] == ‘.‘ || g[x][y][z] == ‘E‘) && st[x][y][z] == -1){
                    q.push(node(x, y, z));
                    st[x][y][z] = st[t.x][t.y][t.z] + 1;
                }
            }
        }

        if(st[ex][ey][ez] == -1) cout << "Trapped!" << endl;
        else cout << "Escaped in "<< st[ex][ey][ez] << " minute(s)." << endl;
    }        
    return 0;
}

这个POJ提交题目是真的恶心,支持的版本的C++太低了,搞得人难受的一批

以上是关于Dungeon Master的主要内容,如果未能解决你的问题,请参考以下文章

POJ-2251-Dungeon Master

Dungeon Master 地下城大师(BFS进阶)

Dungeon Master POJ-2251 三维BFS

Dungeon Master

广度优先搜索(BFS)----------------(TjuOj1140_Dungeon Master)

Dungeon Master(BFS)