编程语言
首页 > 编程语言> > Floyd-Warshall算法正确性证明

Floyd-Warshall算法正确性证明

作者:互联网

以下所有讨论,都是基于有向无负权回路的图上的。因为这一性质,任何最短路径都不会含有环,所以也不讨论路径中包含环的情形!并且为避免混淆,将“最短路径”称为权值最小的路径,将路径经过的点数-1称为路径的长度。

先列出算法的c语言代码实现,后面将用这段代码来辅助证明。

int n;//从1..n共n个点
int dis[maxn][maxn];//权值邻接矩阵
init();//初始化数据
for(int k=1;k<=n;++k)
    for(int i=1;i<=n;++i)
        for(int j=1;j<=n;++j)
            dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]);

先用比较形象的语言来简单叙述一遍。


下面是比较符号化的严谨证明。


在做作业的时候遇到这个算法,想起来好像一直在用但并不理解它的正确性,所以尝试证明了一下。正好也作为我写博客的一个开头吧。

标签:包含,..,Warshall,路径,更新,正确性,Floyd,权值,dis
来源: https://www.cnblogs.com/crazyfz/p/12785136.html