领略算法真谛: 多源bfs

嘿,各位技术潮人!好久不见甚是想念。生活就像一场奇妙冒险,而编程就是那把超酷的万能钥匙。此刻,阳光洒在键盘上,灵感在指尖跳跃,让我们抛开一切束缚,给平淡日子加点料,注入满满的passion。准备好和我一起冲进代码的奇幻宇宙了吗?Let's go!

我的博客:yuanManGan

我的专栏:C++入门小馆 C言雅韵集 数据结构漫游记 闲言碎语小记坊 题山采玉 领略算法真谛

多源最短路问题思路:

我们来对比一下单源最短路问题和多源最短路问题,之前我们解决的单源最短路问题是只有一个起点那如果我们不只有一个起点呢?这时就是多源最短路问题了。

当我们多源最短路的边权都是1的时候,我们就可以使用多源bfs来解决。

我们可以将所有的起点看成一个"超级源点"。然后我们从这个源点开始当成单源最短路问题来处理问题了。比如下面的例子:

比如我们红色的节点是起点,我们要求到所有其他节点的最短路。

这时我们要将所有的红色的节点当成一个超级源点,可以将所有的起点放入一个队列,然后正常进行bfs操作即可。

多说无益我们来试试一道题目:

矩阵距离

题⽬来源: ⽜客⽹
题⽬链接: 矩阵距离
难度系数: ★★

这里补充一个知识,曼哈顿距离:

A和B的曼哈顿距离等于两点的横纵坐标相减再相加,其实就是两点只能走上下左右的最短距离。

题目有个小坑,输入矩阵时数字间没有空格,我们只能用字符数组来存储数据。题目的意思就是求数值不是1的点到数值是1的点的距离,我们将数值为1的点当作超级源点就解决掉了。

代码展示:

cpp 复制代码
#include <iostream>
#include <queue>
#include <cstring>

using namespace std;
const int N = 1010;
typedef pair<int, int> PII;
int n, m;
int dist[N][N];
int dx[] = {0,0,1,-1};
int dy[] = {1,-1,0,0};
char a[N][N];

void bfs()
{
    memset(dist, -1, sizeof dist);
    queue<PII> q;
    for(int i = 1; i <= n; i++)
    {
        for(int j = 1; j <= m; j++)
        {
            if(a[i][j] == '1') 
            {
                dist[i][j] = 0;
                q.push({i, j});
            }
        }
    }
    
    while(q.size())
    {
        auto t = q.front(); q.pop();
        int i = t.first, j = t.second;
        for(int k = 0; k < 4; k++)
        {
            int x = i + dx[k], y = j + dy[k];
            if(x >= 1 && x <= n && y >= 1 && y <= m && dist[x][y] == -1)
            {
                dist[x][y] = dist[i][j] + 1;
                q.push({x,y});
            }
        }
    }
    
}


int main()
{
    cin >> n >> m;
    for(int i = 1; i <= n; i++)
    {
        for(int j = 1; j <= m; j++)
        {
            cin >> a[i][j];
        }
    }
    
    bfs();
    for(int i = 1; i <= n; i++)
    {
        for(int j = 1; j <= m; j++)
        {
            cout << dist[i][j] << " ";
        }
        cout << endl;
    }
    
    return 0;
}
相关推荐
机器学习之心3 小时前
多目标鲸鱼优化算法(NSWOA),含46种测试函数和9个评价指标,MATLAB实现
算法·matlab·多目标鲸鱼优化算法·46种测试函数·9个评价指标
max5006004 小时前
基于Meta Llama的二语习得学习者行为预测计算模型
人工智能·算法·机器学习·分类·数据挖掘·llama
王哥儿聊AI5 小时前
Lynx:新一代个性化视频生成模型,单图即可生成视频,重新定义身份一致性与视觉质量
人工智能·算法·安全·机器学习·音视频·软件工程
手握风云-6 小时前
优选算法的寻踪契合:字符串专题
算法
闭着眼睛学算法6 小时前
【华为OD机考正在更新】2025年双机位A卷真题【完全原创题解 | 详细考点分类 | 不断更新题目 | 六种主流语言Py+Java+Cpp+C+Js+Go】
java·c语言·javascript·c++·python·算法·华为od
IT古董7 小时前
【第五章:计算机视觉-项目实战之目标检测实战】2.目标检测实战:中国交通标志检测-(2)中国交通标志检测数据格式转化与读取
算法·目标检测·计算机视觉
MobotStone7 小时前
LLM 采样入门到进阶:理解与实践 Top-K、Top-P、温度控制
算法
杨小码不BUG7 小时前
CSP-J/S初赛知识点精讲-图论
c++·算法·图论··编码·csp-j/s初赛
LeaderSheepH8 小时前
常见的排序算法
数据结构·算法·排序算法
周杰伦_Jay9 小时前
【图文详解】强化学习核心框架、数学基础、分类、应用场景
人工智能·科技·算法·机器学习·计算机视觉·分类·数据挖掘