Floyd算法的幾個用法

1、求多個點之間的最短路,最廣爲人知的用法:
for(int k = 0; k < n; k ++)
    for(int i = 0; i < n; i ++)
        for(int j = 0; j < n; j ++)
             if(a[i][j] > a[i][k] +a[k][j])
                a[i][j] = a[i][k] + a[k][j];


2、求最小環:

for(int k = 0; k < n; k ++)
    for(int i = 0; i < n; i ++)
        for(int j = 0; j < n; j ++)
             if(ans > a[i][j] + a[j][k] +a[k][i])
                ans = a[i][j] + a[j][k] + a[k][i];


3、傳遞閉包:

for(int k = 0; k < n; k ++)
    for(int i = 0; i < n; i ++)
        for(int j = 0; j < n; j ++)
             if(a[i][j] && a[j][k])
                a[i][k] = 1;


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章