[算法导论笔记]--所有结点对的最短路径问题

本文介绍了如何使用Floyd-Warshall算法解决图中所有结点对的最短路径问题。通过动态规划,从基础解法到Floyd算法的递归解法进行了详细阐述,并提供了算法的核心伪代码。文章还探讨了如何构建最短路径及其前驱矩阵。

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

本文所贴示的伪代码均来源《算法导论》,本文只是对其中《所有结点对的最短路径问题》章节的简单总结,许多数学证明过程已忽略。

对于给定有向图G=(V,E)理论上,我们可以使用|V|次单源最短路径算法来解决所有结点对之间的最短路径问。但除此之外,我们可以利用动态规划来解决此问题(因为一条最短路径的子结构也包含了最短路径).

一、基础解法

最短路径的结构:

对于有向图G=(V,E)的所有结点对的最短路径问题,可以证明一条最短路径的所有子路径都是最短路径。假定用邻接矩阵来表示输入图,即W=(  ). 考虑从结点i到结点j的一条最短路径p,假定p至多包含m条边,还假定没有权重为负值的环路,且m为有限值。

 

如果i=j,则p的权重为0且不包含任何边。如果结点i和j不同,则可以将其分解为i~k->j,其中路径i~k(用p’表示)至多包含m-1条边。可以证明,p’是从结点i到k的一条最短路径。因此,δ(i,j)=δ(i,k)+

 

对所有结点对最短路径问题的递归解

现在假设) 为从结点i到结点j至多包含m条路边的任意路径中的最小权重。当m=0时,从结点i到j之间存在一条没有边的路径当且仅当i=j。因此有

对于m>=1,我们需要计算的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值