当前位置: 首页 > news >正文

领略算法真谛: 多源bfs

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

我的博客:yuanManGan

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

多源最短路问题思路:

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

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

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

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

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

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

矩阵距离

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

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

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

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

代码展示:

#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;
}

http://www.xdnf.cn/news/290035.html

相关文章:

  • 设一个测试情境,新用户注册后显示的名字不完整,测试思路是怎么样的?
  • 项目实战-基于信号处理与SVM机器学习的声音情感识别系统
  • 【Bootstrap V4系列】学习入门教程之 组件-按钮组(Button group)
  • MAC地址与帧结构
  • ICLR2024 | GNS-HFA | 通过梯度归一化缩放和高频适应增强视觉Transformer的可迁移对抗攻击
  • WMS仓库管理系统:Java+Vue,含源码及文档,集成仓储全流程管控,实现库存精准、作业高效、数据透明
  • Visual Studio 项目转Qt项目
  • 用网页显示工控仪表
  • Barrett Reduction算法优化:更紧的界限消除冗余的减法
  • 迅睿CMS导入别站数据库
  • 【瞎折腾/mi50 32G/ubuntu】mi50显卡ubuntu运行大模型开坑(二)使用llama.cpp部署Qwen3系列
  • 卡尔曼滤波详解
  • 从Excel到高级工具:数据分析进阶指南
  • # 部署深度学习模型:Flask API 服务端与客户端通信实战
  • Linux进程间的通信
  • Node.js 是什么?
  • docker 外部能访问外网,内部不行(代理问题)
  • SQL常见误区
  • 如何扫描系统漏洞?漏洞扫描的原理是什么?
  • 【MCP Node.js SDK 全栈进阶指南】专家篇(1):MCP-SDK扩展与定制
  • Dify本地 + vllm + Qwen
  • 走出 Demo,走向现实:DeepSeek-VL 的多模态工程路线图
  • 协议(消息)生成
  • qt csv文件写操作
  • 3.5/Q1,GBD数据库最新一区文章解读
  • P3246 [HNOI2016] 序列 Solution
  • 项目生成日志链路id,traceId
  • 数据库的二级索引
  • 【PostgreSQL数据分析实战:从数据清洗到可视化全流程】4.4 异构数据源整合(CSV/JSON/Excel数据导入)
  • 数据结构小扫尾——栈