• POJ2251 Dungeon Master


        原题链接:http://poj.org/problem?id=2251

        在三维空间内做BFS。

    View Code
    #include <stdio.h>
    #include <string.h>
    #include <queue>
    using namespace std;
    int L, R, C, ans, sx, sy, sz, ex, ey, ez;
    char maze[101][101][101];
    bool vis[101][101][101];
    int dr[6][3] = {{0, 0, 1}, {0, 0, -1}, {1, 0, 0}, {-1, 0, 0}, {0, 1, 0}, {0, -1, 0}};
    
    struct loc
    {
        int x, y, z, step;
    };
    
    bool bfs()
    {
        loc s, tmp;
        s.x = sx, s.y = sy, s.z = sz, s.step = 0;
        vis[sx][sy][sz] = true;
        queue<loc> q;
        q.push(s);
        while(!q.empty())
        {
            loc cur = q.front();
            q.pop();
            int cx = cur.x;
            int cy = cur.y;
            int cz = cur.z;
            int cstep = cur.step;
            for(int i = 0; i < 6; i ++)
            {
                int x = cx + dr[i][0];
                int y = cy + dr[i][1];
                int z = cz + dr[i][2];
                if(x < 1 || x > C || y < 1 || y > R || z < 1 || z > L)
                    continue;
                if(maze[x][y][z] == '.' && !vis[x][y][z])
                {
                    vis[x][y][z] = true;
                    tmp.x = x, tmp.y = y, tmp.z = z, tmp.step = cstep + 1;
                    q.push(tmp);
                }
                if(maze[x][y][z] == 'E')
                {
                    ans = cstep + 1;
                    return true;
                }
            }
        }
        return false;
    }
    
    int main()
    {
        int i, j, k;
        while(scanf("%d%d%d", &L, &R, &C), (L || R ||C))
        {
            for(i = 1; i <= L; i ++)
            {
                for(j = 1; j <= R; j ++)
                {
                    getchar();
                    for(k = 1; k <= C; k ++)
                    {
                        scanf("%c", &maze[k][j][i]);
                        if(maze[k][j][i] == 'S')
                            sz = i, sy = j, sx = k;
                        if(maze[k][j][i] == 'E')
                            ez = i, ey = j, ex = k;
                    }
                }
                getchar();
            }
            memset(vis, false, sizeof(vis));
            if(bfs())
                printf("Escaped in %d minute(s).\n", ans);
            else
                printf("Trapped!\n");
        }
        return 0;
    }
  • 相关阅读:
    element表格添加序号
    ZOJ 3822 Domination(概率dp)
    HDU 3037(Lucas定理)
    HDU 5033 Building(单调栈维护凸包)
    HDU 5037 Frog(贪心)
    HDU 5040 Instrusive(BFS+优先队列)
    HDU 5120 Intersection(几何模板题)
    HDU 5115 Dire Wolf(区间dp)
    HDU 5119 Happy Matt Friends(dp+位运算)
    C++ string详解
  • 原文地址:https://www.cnblogs.com/huangfeihome/p/2668902.html
Copyright © 2020-2023  润新知