最短路(一)Floyd

Floyd

Floyd一般作爲最短路入門算法來講解
思想
對於每一個點對,尋找一箇中間點使得它可以更新兩個點的距離
應用
Floyd除了用於最短路,在其他方面也有應用
傳遞閉包:
如果喜歡有傳遞性,A喜歡B,B喜歡C,現在詢問A是否喜歡C.
這類問題統一具有傳遞性
轉化爲圖的話,就是給出一些點後檢驗某兩點是否聯通,代碼在下面
代碼
最短路
for(int k=1;k<=n;k++)
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++){
            if(dis[i][k] + dis[k][j] < dis[i][j])dis[i][j] = dis[i][k] + dis[k][j];
        }
傳遞閉包
for(int k=1;k<=n;k++){
    for(int i=1;i<=n;i++){
        if(dis[i][k]){
            for(int j=1;j<=n;j++){
                if(dis[k][j])dis[i][j] = 1;
            }
        }
    }
}

return 0

發佈了55 篇原創文章 · 獲贊 15 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章