尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

单源最短路 总结

单源最短路 总结
📅 发布时间:2026/6/19 16:42:29

概念

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

树有无环、联通的特点,所以任意两点间简单路径唯一,以起点作为根节点 \(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跑正权边了,被卡了!!!!

总结:最短路太难了

相关新闻

  • 102301303_俞欢殷学期回顾
  • YOLO训练任务命名规范?便于GPU资源管理
  • 【负荷预测】布谷鸟(CS)算法优化BP神经网络的负荷及天气预测附Matlab代码

最新新闻

  • Python自动化抢票终极指南:5分钟掌握大麦网高效抢票技术
  • 北京摄影学校精选推荐,2026年北京靠谱的摄影学校推荐 - 教育信息网
  • 深度解析macOS滚动事件拦截:构建专业级定制插件的完整指南
  • 常州多年黄金回收攻略,三十年实体经营,收的顶本地口碑有保障 - 奢侈品回收测评
  • 01_系统架构设计
  • 如何免费实现专业级直播抠像:obs-backgroundremoval插件完全指南

日新闻

  • 5分钟掌握Python进化算法:Geatpy高性能优化工具完全指南
  • Microchip 24AA044 EEPROM选型与应用全指南:从参数解析到实战编程
  • 华为的鸿蒙到底有多牛?为什么称作遥遥领先?

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号