Floyd-Warshall算法

Floyd-Warshall算法

Floyd算法实现

给定有向或无向图GG,设d[][]d[][]是1-based的邻接矩阵(其中d[i][i]=0d[i][i]=0),则Floyd算法实现如下:

for (int k = 1; k <= n; ++k) {
    for (int i = 1; i <= n; ++i) {
        for (int j = 1; j <= n; ++j) {
            d[i][j] = min(d[i][j], d[i][k] + d[k][j]); 
        }
    }
}

可以理解成:最外层循环依次用每个节点(kk)做中间节点,看是否能得到任意两点(i,ji,j)间的距离。经过O(n3n^3)计算之后,就得到两两节点间的最短距离。

例题

习题
P5839USACO GoldMoortal Cowmbat2019提高+/省选-解答