zoukankan      html  css  js  c++  java
  • 迷宫,较为高效的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]);
    }
    }



  • 相关阅读:
    CSS居中方法搜集
    函数表达式与函数声明的一点区别
    z-index 解析
    Android EditText的输入监听,输入字符的动态获取
    dispatchkeyevent的调用机制
    自定义带有图片的PreferenceActivity
    declare-styleable:自定义控件的属性
    在fragment中调用SharedPreferences
    使用Preference保存设置
    getSharedPreferences()与getSharedPreferences()与getDefaultSharedPreferences()的区别
  • 原文地址:https://www.cnblogs.com/love533/p/2433170.html
Copyright © 2011-2022 走看看