首页 > 其他 > 详细

bfs

时间:2021-02-03 10:13:35      阅读:25      评论:0      收藏:0      [点我收藏+]

技术分享图片

 

 

技术分享图片

 

 

#include <cstdio>

#include <queue>

#include <utility>//pair

using namespace std;

 

typedef pair<int, int> pii;

const int N = 405;

 

int d[N][N];

 

int main() {

    int n, m, a, b;

    scanf("%d%d%d%d", &n, &m, &a, &b);

    a--, b--;

 

    for (int i = 0; i < n; ++i) {

        for (int j = 0; j < m; ++j) {

            d[i][j] = -1;

        }

    }

    d[a][b] = 0;

 

    queue<pii> q;

    q.push(pii(a, b));

    while (!q.empty()) {

        pii p = q.front();//包括下面一行,这两行是bfs的核心

        q.pop();//后弹出,因为之前只是取出,并没有弹出

        int x = p.first, y = p.second;

        int dx[] = {-2, -1, 1, 2, 2, 1, -1, -2};

        int dy[] = {1, 2, 2, 1, -1, -2, -2, -1};

        for (int i = 0; i < 8; ++i) {

            int nx = x + dx[i], ny = y + dy[i];

            if (0 <= nx && nx < n && 0 <= ny && ny < m && d[nx][ny] == -1) {

                d[nx][ny] = d[x][y] + 1;

                q.push(pii(nx, ny));//把这个点衍生的所有点推入队列

            }

        }

    }

 

    for (int i = 0; i < n; ++i) {

        for (int j = 0; j < m; ++j) {

            printf("%-5d", d[i][j]);

        }

        puts("");

    }

}

bfs

原文:https://www.cnblogs.com/Hello-world-hello-lazy/p/14365112.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!