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

单源最短路 总结

概念

单源最短路径,顾名思义,就是只有一个起点,并且到其他的点都是最短的。

树有无环、联通的特点,所以任意两点间简单路径唯一,以起点作为根节点 \(DFS/BFS\) 求距离即可。

之前在图上跑最短路都是用 \(bfs\),但他只能处理边权相同的图,所以,今天的最短路是可以处理其他边权的。

著名的单源最短路径算法有 Dijkstra,Bellman-Ford,SPFA等算法。

dijkstra 算法

dijkstra 是一种点核心的单源最短路算法,核心思想是:

  1. 找到没有确定最短路的点里面,距离起点最近的点u。
  2. 用起点到点u的距离dis[u],尝试更新u的邻接点的最短距离。

重复以上操作直到所有点的最短距离都被确定。

代码:

#include <bits/stdc++.h>using namespace std;
#define ll long long
const int MAXH = 1e5 + 7;
const int INF = 0x3f3f3f3f;
int n,m,s;
struct edge{int v,w;
};
vector<edge>e[MAXH];
struct node{int dis,u;bool operator > (const node &x) const{return dis > x.dis;}
};
int dis[MAXH];
bool vis[MAXH];
priority_queue<node,vector<node>,greater<node>>q;
inline void dijkstra(int sx){memset(dis,0x3f,sizeof(dis));memset(vis,false,sizeof(vis));while(!q.empty()) q.pop();q.push((node){0,sx});dis[sx] = 0;while(!q.empty()){int u = q.top().u;q.pop();if(vis[u])continue;vis[u] = 1;for(auto ed : e[u]){int v = ed.v,w = ed.w;if(dis[v] > dis[u] + w){dis[v] = dis[u] + w;q.push((node){dis[v],v});}}}
}
int main(){scanf("%d%d%d",&n,&m,&s);for(int i = 1;i <= m;i++){int x,y,w;scanf("%d%d%d",&x,&y,&w);e[x].push_back((edge){y,w});}dijkstra(s);for(int i = 1;i <= n;i++)printf("%d ",dis[i]);return 0;
}

bellman-ford 算法

bellman算法是一种边核心的最短路算法。

松弛操作与 dijkstra 中相同,假设有一条从u到v,边权为w的边,那么我们就可以尝试用 dis[u] + w 来更新 dis[v]。

在每一轮循环中,我们尝试用每一条边更新这条边的终点的最短路,复杂度 \(O(m)\)

如果起点不能到达负环,存在最短路,那么最短路最多包括 n-1 条边,

每轮松弛都会使最短路至少多一条边。

所以最多需要进行n-1轮循环,最终复杂 \(O(nm)\)

SPFA 算法

SPFA,是 bellman-ford 的队列优化。

只有上一次被松弛过的终点,才有作为起点松弛的价值。
所以可以用一个队列存被松弛过的终点的集合,每次取出队头松弛该点的出边。

在随机图和一些有特殊性质的图上表现优秀,
但复杂度上界和bellman相同,也是 \(O(nm)\)

所以,没负权边还是用 dijkstra 把。

下次再也不用spfa跑正权边了,被卡了!!!!

总结:最短路太难了

http://www.jsqmd.com/news/155698/

相关文章:

  • YOLO目标检测灰度发布完成:新模型GPU性能达标
  • YOLO训练过程中GPU温度过高?散热优化建议
  • 【风能资源评估数据分析】导入、处理并讲解从气象塔测量的历史风力数据研究附Matlab代码
  • YOLO推理服务弹性伸缩:根据GPU负载自动扩缩容
  • npm在文件下输入运行命令,授权限制问题window
  • 102301303_俞欢殷学期回顾
  • minicom在嵌入式调试中的应用:项目应用解析
  • 2025专业皮手套厂家/羊皮手套厂家的品质如何 - 栗子测评
  • YOLO训练任务资源隔离:多用户共享GPU集群
  • YOLO在天文观测图像中星体定位的尝试性应用
  • 【负荷预测】布谷鸟(CS)算法优化BP神经网络的负荷及天气预测附Matlab代码
  • YOLO训练任务命名规范?便于GPU资源管理
  • YOLO模型推理请求日志分析:发现潜在GPU瓶颈
  • RAX3000M 普通版 刷机 openwrt24.10.5 笔记
  • YOLOv10性能评测:在RTX 4090上能达到多少FPS?
  • 推荐阅读:Java安装:JDK环境变量配置最新教程【纯小白安装教程,超 ...
  • 2025杭州AMG推荐品牌排行榜 - 栗子测评
  • YOLO目标检测模型冷启动问题解决方案
  • 2025研究生必看!9个降AI率工具测评榜单
  • YOLO系列演进史:从学术研究到工业落地的完整路径
  • 2025 电感工厂哪家好?这8家优质厂商为您提供专业技术 - 栗子测评
  • YOLO目标检测模型漂移修复:自动重新训练机制
  • Agentic AI技术伦理的商业应用,提示工程架构师的考量
  • YOLO推理服务限流策略:防止GPU被突发请求压垮
  • YOLO训练数据增强策略自动化:NAS搜索最优组合
  • YOLO安防监控实战:低功耗GPU也能跑高精度模型
  • AUTOSAR网络管理项目应用:ECU休眠唤醒操作指南
  • 2025冲床冲压机械手生产商实力榜单 - 栗子测评
  • YOLO目标检测模型镜像支持ARM架构设备
  • arm64 GPIO驱动开发:手把手实现流程