• POJ2251—— BFS——Dungeon Master


    http://poj.org/problem?id=2251

    /*
    简单bfs,向六个方向拓展
    
    */
    /************************************************
    * Author        :Powatr
    * Created Time  :2015-8-9 9:23:15
    * File Name     :B.cpp
     ************************************************/
    
    #include <cstdio>
    #include <algorithm>
    #include <iostream>
    #include <sstream>
    #include <cstring>
    #include <cmath>
    #include <string>
    #include <vector>
    #include <queue>
    #include <deque>
    #include <stack>
    #include <list>
    #include <map>
    #include <set>
    #include <bitset>
    #include <cstdlib>
    #include <ctime>
    using namespace std;
    
    #define lson l, mid, rt << 1
    #define rson mid + 1, r, rt << 1 | 1
    typedef long long ll;
    const int MAXN = 1e5 + 10;
    const int INF = 0x3f3f3f3f;
    const int MOD = 1e9 + 7;
    int dirx[] = {1, -1, 0, 0, 0};
    int diry[] = {0, 0, 1, -1, 0};
    struct P{
        int z, x, y; 
        int step;
    }a[110]; 
    int L, R, C;
    int sx, sy, sz, ex, ey, ez;
    queue <P> q;
    bool vis[40][40][40];
    char maze[40][40][40];
    bool ok(int z, int x, int y)
    {
        if(x >= 1 && x <= R && y >= 1 && y <= C && z >= 1 && z <= L && (maze[z][x][y] == '.' || maze[z][x][y] == 'S' || maze[z][x][y] == 'E') && !vis[z][x][y] ) 
            return true;
        return false;
    }
    int main(){
        while(~scanf("%d%d%d", &L, &R, &C) && L && R && C){
            getchar();
            memset(vis, false, sizeof(vis));
            memset(maze, '.', sizeof(maze));
            for(int i = 1; i <= L; i++){
                for(int j = 1; j <= R; j++){
                    for(int k = 1; k <= C; k++){
                        scanf("%c", &maze[i][j][k]);
                        if(maze[i][j][k] == 'S'){
                            sx = j, sy = k, sz = i;
                        }
                        if(maze[i][j][k] == 'E'){
                            ex = j, ey = k, ez = i;
                        }
                    }
                    getchar();
                }
                getchar();
            }
            while(!q.empty())
            q.pop();
            q.push((P){sz, sx, sy, 0});
            int flag = 1;
            while(!q.empty()){
                P now = q.front();
                q.pop();
                int x = now.x, y = now.y, z = now.z;
                int step = now.step;
                if(!ok(z, x, y)) continue;
                if(x == ex && y == ey && z == ez) {
                    printf("Escaped in %d minute(s).
    ", step);
                    flag = 0;
                    break;
                }
                for(int i = 0; i < 4; i++){
                   int dx = x + dirx[i], dy = y + diry[i];
             //   printf("%d %d %d
    ", z, dx, dy);
                    if(ok(z, dx, dy)){
                        vis[z][x][y] = true;
                        q.push((P){z, dx, dy, step+1});
                    }
                }
                if(ok(z+1, x, y)){
                    vis[z][x][y] = true;
                    q.push((P){z+1, x, y, step+1});
                }
                if(ok(z-1, x, y)){
                    vis[z][x][y] = true;
                    q.push((P){z-1, x, y, step+1});
                }
            }
            if(flag) printf("Trapped!
    ");
        }
        return 0;
    }
    

      

  • 相关阅读:
    CF431E Chemistry Experiment
    BZOJ 4173: 数学
    BZOJ 2426: [HAOI2010]工厂选址
    BZOJ 2580: [Usaco2012 Jan]Video Game
    BZOJ 4237: 稻草人
    BZOJ 2434: [Noi2011]阿狸的打字机
    BZOJ 3881: [Coci2015]Divljak
    BZOJ 2754: [SCOI2012]喵星球上的点名
    BZOJ 1009: [HNOI2008]GT考试
    BZOJ 3731: Gty的超级妹子树
  • 原文地址:https://www.cnblogs.com/zero-begin/p/4714715.html
Copyright © 2020-2023  润新知