码迷,mamicode.com
首页 > 其他好文 > 详细

HDU1253 胜利大逃亡【BFS】

时间:2015-04-05 23:35:10      阅读:259      评论:0      收藏:0      [点我收藏+]

标签:

题目链接:

http://acm.hdu.edu.cn/showproblem.php?pid=1253


题目大意:

有一个三维立体的立方体迷宫,开始的位置为(0,0,0),离开的位置为(A-1,B-1,C-1),迷宫中0表示

路,1表示墙,你只能从一个坐标走到相邻的六个坐标其中的一个。问:离开这个迷宫的最短时间

是多少。


思路:

可以很容易的想到BFS找到最短的路径。只不过是三维的,用个二维数组存放六个方向。用队列来

实现BFS。


AC代码:

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;

const int Dire[6][3] = {{0,0,-1},{0,0,1},{0,-1,0},{0,1,0},{-1,0,0},{1,0,0}};
int Map[55][55][55];

struct Node
{
    int x;
    int y;
    int z;
    int time;
};

int BFS(int A,int B,int C,int Time)
{
    Node p,p1;
    int ans = 0xffffff0;
    p.x = 0;
    p.y = 0;
    p.z = 0;
    p.time = 0;
    queue<Node> q;
    q.push(p);
    while( !q.empty() )
    {
        p = q.front();
        q.pop();
        if(p.time > Time)
            continue;
        if(p.x == A-1 && p.y == B-1 && p.z == C-1)
            ans = min(ans,p.time);
        for(int i = 0; i < 6; ++i)
        {
            p1.x = p.x + Dire[i][0];
            p1.y = p.y + Dire[i][1];
            p1.z = p.z + Dire[i][2];
            if(p1.x < 0 || p1.y < 0 || p1.z < 0 || p1.x >= A || p1.y >= B || p1.z >= C)
                continue;
            if(Map[p1.x][p1.y][p1.z])
                continue;
            Map[p1.x][p1.y][p1.z] = 1;
            p1.time = p.time + 1;
            q.push(p1);
        }
    }
    return ans;
}

int main()
{
    int T;
    scanf("%d", &T);
    while(T--)
    {
        int A,B,C,Time;
        scanf("%d%d%d%d",&A,&B,&C,&Time);

        for(int i = 0; i < A; ++i)
            for(int j = 0; j < B; ++j)
                for(int k = 0; k < C; ++k)
                    Map[i][j][k] = 1;
        for(int i = 0; i < A; ++i)
            for(int j = 0; j < B; ++j)
                for(int k = 0; k < C; ++k)
                    scanf("%d",&Map[i][j][k]);

        int ans = BFS(A,B,C,Time);
        if(ans > Time)
            printf("-1\n");
        else
            printf("%d\n",ans);
    }

    return 0;
}


HDU1253 胜利大逃亡【BFS】

标签:

原文地址:http://blog.csdn.net/lianai911/article/details/44892767

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!