• Dungeon Master POJ


    对于3维的,可以用结构体来储存,详细见下列代码。

    样例可以过,不过能不能ac还不知道,疑似poj炸了,

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<queue>
    using namespace std;
    const int INF = 0x3f3f3f3f;
    int dx[] = {1, -1, 0, 0, 0, 0};
    int dy[] = {0, 0, -1, 1, 0, 0};
    int dz[] = {0, 0, 0, 0, 1, -1};
    int bx, by, bz;
    int ex, ey, ez;
    const int maxn = 30 + 5;
    class POS
    {
        public:
            POS():x_(-1), y_(-1), z_(-1){ }
            POS(int x, int y, int z):x_(x), y_(y), z_(z){ }
            int getX(){ return x_;}
            int getY(){ return y_;}
            int getZ(){ return z_;}
        private:
            int x_, y_, z_;
    };
    typedef POS P;
    struct Level
    {
        char maze[maxn][maxn];
        int vis[maxn][maxn];
        int d[maxn][maxn];
    };
    int L, R, C;
    Level *h;
    bool op(int x, int y, int z)
    {
        if(x >= 0 && x < R && y >= 0 && y < C && z >= 0 && z < L)
            return true;
        return false;
    }
    int bfs()
    {
        queue<P> pos;
        pos.push(P(bx, by, bz));
        while(!pos.empty())
        {
            P p = pos.front();
            pos.pop();
            if(p.getX() == ex && p.getY() == ey && p.getZ() == ez)
                break;
            h[p.getZ()].vis[p.getX()][p.getY()] = 1;
            for(int i = 0; i < 6; i++)
            {
                int curx = p.getX() + dx[i], cury = p.getY() + dy[i], curz = p.getZ() + dz[i];
                if(op(curx, cury, curz) && h[curz].maze[curx][cury] != '#' && !h[curz].vis[curx][cury])
                {
                    h[curz].vis[curx][cury] = 1;
                    pos.push(P(curx, cury, curz));
                    h[curz].d[curx][cury] = h[p.getZ()].d[p.getX()][p.getY()] + 1;
                }
            }
    
        }
        return h[ez].d[ex][ey];
    
    }
    int main()
    {
        while(cin >> L >> R >> C && (L || R || C))
        {
            bx = by = bz = -1;
            ex = ey = ez = -1;
            h = new Level[L];
            for(int i = 0; i < L; i++)
            {
                for(int j = 0; j < R; j++)
                {
                    scanf("%s", h[i].maze[j]);      //input
                    for(int k = 0; k < C ; k++)
                    {
                        h[i].vis[j][k] = 0;
                        if(h[i].maze[j][k] == 'S')
                        {
                            h[i].d[j][k] = 0;
                            bx = j;
                            by = k;
                            bz = i;
                        }
                        else
                            h[i].d[j][k] = INF;
                        if(h[i].maze[j][k] == 'E')
                        {
                            ex = j;
                            ey = k;
                            ez = i;
                        }
                    }
    
                }
    
            }
            int ans = bfs();
            if(ans == INF)
                cout << "Trapped!" << endl;
            else
                cout << "Escaped in " << ans << " minute(s)." << endl;
    
    
    
    
            delete []h;
    
        }
    
    }
    
  • 相关阅读:
    etcd:从应用场景到实现原理的全方位解读
    open-falcon编写的整个脑洞历程
    开源还是商用?十大云运维监控工具横评
    我的后端开发书架2015 2.0版
    【MDCC 2015】友盟数据平台负责人吴磊:移动大数据平台的架构与实践
    Effective Go
    Airbnb JavaScript Style Guide
    Google HTML/CSS Style Guide
    nservicebus教程-目录
    测试
  • 原文地址:https://www.cnblogs.com/KeepZ/p/11143765.html
Copyright © 2020-2023  润新知