POJ2251.Dungeon Master(三維BFS)

#include<stdio.h>
#include<queue>
#include<string.h>
using namespace std;

struct Point
{
    int x,y,z;
} tmp,tmp1;

int l,r,c;
int vis[35][35][35];
char str[35][35][35];
int d[6][3] = {{0,0,1},{0,0,-1},{0,1,0},{0,-1,0},{1,0,0},{-1,0,0}};

queue<Point>q;

int BFS(Point t,Point s)
{
    Point p,tmp2;
    while(!q.empty())
    {
        q.pop();
    }
    vis[t.x][t.y][t.z] = 1;
    q.push(t);
    while(!q.empty())
    {
        p = q.front();
        q.pop();
        for(int i = 0; i < 6; i++)
                {
                    tmp2.x = p.x + d[i][0];
                    tmp2.y = p.y + d[i][1];
                    tmp2.z = p.z + d[i][2];
                    if(!vis[tmp2.x][tmp2.y][tmp2.z] && str[tmp2.x][tmp2.y][tmp2.z] != '#' && tmp2.x >= 0 && tmp2.x < l && tmp2.y >= 0 && tmp2.y < r && tmp2.z >= 0 && tmp2.z < c)
                    {
                        vis[tmp2.x][tmp2.y][tmp2.z] = vis[p.x][p.y][p.z] + 1;
                        q.push(tmp2);
                        //printf("%d %d %d %d\n",tmp2.x,tmp2.y,tmp2.z,vis[tmp2.x][tmp2.y][tmp2.z]);
                    }
                }
        if(vis[s.x][s.y][s.z])
            break;
    }
    return vis[s.x][s.y][s.z] - 1;
}

int main()
{
    while(~scanf("%d%d%d",&l,&r,&c))
    {
        if(l == 0 && r == 0 & c == 0)
            return 0;
        memset(str,'0',sizeof(str));
        memset(vis,0,sizeof(vis));
        for(int i = 0; i < l; i++)
            for(int j = 0; j < r; j++)
                    scanf("%s",str[i][j]);
        for(int i = 0; i < l; i++)
            for(int j = 0; j < r; j++)
                for(int k = 0; k < c; k++)
                {
                    if(str[i][j][k] == 'S')
                    {
                        tmp.x = i;
                        tmp.y = j;
                        tmp.z = k;
                        //printf("%d %d %d\n",i,j,k);
                    }
                    if(str[i][j][k] == 'E')
                    {
                        tmp1.x = i;
                        tmp1.y = j;
                        tmp1.z = k;
                       // printf("%d %d %d\n",i,j,k);
                    }
                }
        int ans = BFS(tmp,tmp1);
        if(ans <= 0)
            printf("Trapped!\n");
        else printf("Escaped in %d minute(s).\n",ans);
    }
    return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章