本文所贴示的伪代码均来源《算法导论》,本文只是对其中《所有结点对的最短路径问题》章节的简单总结,许多数学证明过程已忽略。
对于给定有向图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,我们需要计算的