最短路最长路整理

本文整理了图论中的最短路径算法,包括Bellman-Ford、Dijkstra、SPFA等,并探讨了如何求解最长路径。这些算法在处理单源最短路、有向无环图最短路及多源最短路等问题时各有特点,其中Bellman-Ford和SPFA可以处理负权重,而Dijkstra则不能。文章还提到了Floyd算法在求解多源最短路时的应用,并讨论了它们在实际问题中的应用,如差分约束问题的解决方案。
摘要由CSDN通过智能技术生成

发现很多东西不记下来过一段时间就想不明白了,先整理一部分,嗯不对的地方请路过的同学指正~

首先,最短路径相关算法通常依赖一个重要性质,即最短路径的子路径也是最短路。证明如下:


单源最短路:

1、Bellman-Fold算法 (将权值变为相反数,可以求最长路)

数组dis[i]]记录从源点s到顶点i的路径长度,初始化数组dis[i]为正无穷, dis[s]为0;

以下操作循环执行至多n-1次,n为顶点数:

这是因为最短路从1到n,最多经过n-1条边,而最上边每一层for循环,实际上是求从源点出发,只经过k条边最短路是多少,k最多n-1

对于每一条边e(u, v),如果dis[u] + w(u, v) < dis[v],则另dis[v] = dis[u]+w(u, v)。w(u, v)为边e(u,v)的权值;

若上述操作没有对Distant进行更新,说明最短路径已经查找完毕,或者部分点不可达,跳出循环(用flag标记优化)。否则执行下次循环;

为了检测图中是否存在负环路,即权值之和小于0的环路。对于每一条边e(u, v),如果存在dis[u] + w(u, v) < dis[v]的边,则图中存在负环路,即是说改图无法求出单源最短路径。否则数组dis[n]中记录的就是源点s到各顶点的最短路径长度。

复杂度为O(VE),最短路可以处理负环。


2、DAG(有向无环图) Shortest Path (可以求最长路)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值