最短路与动态规划(二)

本文介绍了几种基于动态规划的最短路算法,包括贝尔曼-福特算法、弗洛伊德-瓦尔肖算法和迪杰斯特拉算法。贝尔曼-福特算法用于解决无负权环路的一对多最短路问题,弗洛伊德-瓦尔肖算法则适用于多对多的最短路问题,而迪杰斯特拉算法在无负权的情况下效率最高。文章通过实例详细解析了每个算法的运作过程,并说明了如何通过算法找出最短路径。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.一对多的无负权环路最短路问题可使用贝尔曼-福特算法求解

2.多对多的无负权环路最短路问题可使用弗洛伊德-瓦尔肖算法求解

3.迪杰斯特拉算法适用于一对多且路为非负的最短路问题

4.一对多的无环有向图也有最高效的算法

继上一篇最短路问题,我们介绍几种利用动态规划思想开发的算法。

传送门:最短路与动态规划(一)

1

一对多最短路算法

先介绍第一个无负权环路的最短路算法,由贝尔曼(R.E.Bellman)和福特(L.R.Ford)从函数方程启发而得的算法——贝尔曼-福特算法。为此,我们先引入记号:

83df56d8c6c3222492c3d19bb6a42e03.png

我们先给出算法的详细流程:

b9145d301ba643a197a2d331772ac3a8.png

我们以“双环”马戏团为案例,来感受一下该算法的全流程,起点为节点1,对于t=0,很显然有:

f689f62a003990759738e226e6c77076.png

对于t=1,我们有:

1eb221e1930d4897501019c6daac2308.png

最终我们得到下面这张从t=0到6的表格,对应的d[k]进行更新:

faf54c00c183aca679635a6adf116b38.png

可以看到,从起点1到终点9的最短路长度是5.5(这里指成本),为了方面,我们做了简化,并且把最短路用绿色底色标注出来:

554af875069272bbf21b1a8087c760e5.png

可以看到,从终点开始,t=5时刻的最短路上一个节点是8,t=4时节点8的上一个节点是7,以此类推,得到了最短路径:1-3-5-7-8-9,下图的红色路径就是最短路:

bd6b713accc37e074cc52076be5ff691.png

上面的算法能终止条件是图中不包含负权环路,如果遇到了负权环路,它就会不断变化,我们也可以用来判断一个图中是否包含负权环路。有原理:

如果贝尔曼-福特算法遇到了有负权环路的情况,那么当t=节点数后,v[k]仍有可能在不断变化,而仍在变化的节点处于那个负权环路之中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

整得咔咔响

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值