1. 程式人生 > >和小哥哥一起刷洛谷(8) 圖論之Floyd“算法”

和小哥哥一起刷洛谷(8) 圖論之Floyd“算法”

關於 str 目前 算法 無限 最短 一個 端點 更新

關於floyd

floyd是一種可以計算圖中所有端點之間的最短的“算法”,其偽代碼如下:

for(所有起點i)
    for(所有終點j)
        如果i=j: i到j最短路設為0
        如果i與j相連: i到j最短路設為已知i到j的距離
        如果都不滿足: i到j距離設為無限

for(枚舉所有中間點k)
    for(枚舉所有起點i)
        for(枚舉所有終點j)
            如果(從i到k的最短路+從k到j的最短路<目前得出從i到j的最短路): 更新i到j最短路

別問我復雜度,看看這華麗的三重循環就知道了
大家也許註意到我標題中用的是帶引號的“ 算法

”。其實,我覺得真正意義上,這不算一個算法,之能稱之為一種“暴力”,尤其其時間復雜度為恐怖的 N^3

這樣的一種“算法”,美曰其名叫“重機槍” (醜曰其名叫“全國中小學生宇宙超級無敵大枚舉”)

和小哥哥一起刷洛谷(8) 圖論之Floyd“算法”