• 迷宫,较为高效的C++代码 BFS实现


    同样的BFS,这种方法相对内存占用较小。

    复制别人的代码,学习了!

    题目描述:

    sun所在学校每年都要举行电脑节,今年电脑节有一个新的趣味比赛项目叫做闯迷宫。
    sun的室友在帮电脑节设计迷宫,所以室友就请sun帮忙计算下走出迷宫的最少步数。
    知道了最少步数就可以辅助控制比赛难度以及去掉一些没有路径到达终点的map。
    比赛规则是:从原点(0,0)开始走到终点(n-1,n-1),只能上下左右4个方向走,只能在给定的矩阵里走。

    输入:

    输入有多组数据。
    每组数据输入n(0<n<=100),然后输入n*n的01矩阵,0代表该格子没有障碍,为1表示有障碍物。
    注意:如果输入中的原点和终点为1则这个迷宫是不可达的。

    输出:

    对每组输入输出该迷宫的最短步数,若不能到达则输出-1。

    样例输入:
    2
    0 1
    0 0
    5
    0 0 0 0 0
    1 0 1 0 1
    0 0 0 0 0
    0 1 1 1 0
    1 0 1 0 0
    样例输出:
    2
    8
    #include<stdio.h>
    #include<queue>
    #define INF 0x7fffffff
    using namespace std;
    struct S {
    int x, y;
    S(int i, int j) {
    x = i, y = j;
    }
    };
    int M[102][102], D[102][102], n, i, j, t;
    int main() {
    while (~scanf("%d", &n)) {
    for (i = 0; i < n; ++i)
    for (j = 0; j < n; ++j)
    D[i][j] = INF,scanf("%d", &M[i][j]);
    queue<S> r;
    --n;
    if (M[0][0] || M[n][n]) {
    puts("-1");
    continue;
    }
    r.push(S(0, 0));
    D[0][0] = 0;
    while (!r.empty()) {
    i = r.front().x, j = r.front().y;
    r.pop();
    t = D[i][j] + 1;
    if (i - 1 >= 0 && !M[i - 1][j] && D[i - 1][j] > t)
    D[i - 1][j] = t, r.push(S(i - 1, j));
    if (j - 1 >= 0 && !M[i][j - 1] && D[i][j - 1] > t)
    D[i][j - 1] = t, r.push(S(i, j - 1));
    if (i + 1 <= n && !M[i + 1][j] && D[i + 1][j] > t)
    D[i + 1][j] = t, r.push(S(i + 1, j));
    if (j + 1 <= n && !M[i][j + 1] && D[i][j + 1] > t)
    D[i][j + 1] = t, r.push(S(i, j + 1));
    }
    if (D[n][n] >= INF)
    D[n][n] = -1;
    printf("%d\n", D[n][n]);
    }
    }



  • 相关阅读:
    Mac保留Python2安装Python3(Anaconda3)
    Mybatis Plugin 以及Druid Filer 改写SQL
    Jackson替换fastjson
    Java单元测试 Http Server Mock框架选型
    应用中有多个Spring Property PlaceHolder导致@Value只能获取到默认值
    RabbitMQ Policy的使用
    Collectors.toMap不允许Null Value导致NPE
    php 删除标签
    php 替换标签
    jquery拼接html
  • 原文地址:https://www.cnblogs.com/love533/p/2433170.html
Copyright © 2020-2023  润新知