• HDU_1253 胜利大逃亡(BFS)


      纠结一晚上,注意细节啊!!!(看到有很多解题报告都用<queue>,我不太喜欢用STL的东西。。。)


    My Code:

    #include <iostream>
    #include
    <cstdio>
    #include
    <cstring>

    using namespace std;

    const int N = 51;

    struct node
    {
    int x;
    int y;
    int z;
    int t;
    }q[N
    *N*N];

    int d[6][3] = {{1, 0, 0}, {-1, 0, 0}, {0, 1, 0}, {0, -1, 0}, {0, 0, -1}, {0, 0, 1}};
    int map[N][N][N];
    int ans, T, X, Y, Z;

    int bfs()
    {
    int f = 0, r = 0, i;
    node p;
    map[
    0][0][0] = 1;
    q[
    0].x = 0; q[0].y = 0;
    q[
    0].z = 0; q[0].t = 0;
    while(f <= r)
    {
    p
    = q[f++];

    for(i = 0; i < 6; i++)
    {
    int a = p.x + d[i][0];
    int b = p.y + d[i][1];
    int c = p.z + d[i][2];
    if(a >= 0 && a < X && b >= 0 && b < Y && c >= 0 && c < Z && !map[a][b][c])
    {
    if(a == X-1 && b == Y-1 && c == Z-1 && p.t+1 <= T)
    {
    ans
    = p.t + 1;
    return 1;
    }r
    ++;
    map[a][b][c]
    = 1;
    q[r].x
    = a;
    q[r].y
    = b;
    q[r].z
    = c;
    q[r].t
    = p.t+1;
    }
    }
    }
    return 0;
    }

    int main()
    {
    //freopen("data.in", "r", stdin);
    int t, i, j, k;
    scanf(
    "%d", &t);
    while(t--)
    {
    scanf(
    "%d%d%d%d", &X, &Y, &Z, &T);

    memset(map,
    0, sizeof(map));

    for(i = 0; i < X; i++)
    for(j = 0; j < Y; j++)
    for(k = 0; k < Z; k++)
    scanf(
    "%d", &map[i][j][k]);
    ans
    = 0;
    if(bfs())
    printf(
    "%d\n", ans);
    else
    printf(
    "-1\n");
    }
    return 0;
    }
  • 相关阅读:
    oracle性能监控
    MySQL Explain详解
    oracle中merge into用法解析
    Mysql常见函数
    Quartz -第一篇-入门
    搭建zookeeper集群
    linux 安装mysql
    mysql无法远程访问
    ActiveMQ 持久化
    Nyoj 城市平乱(图论)
  • 原文地址:https://www.cnblogs.com/vongang/p/2149970.html
Copyright © 2020-2023  润新知