1. 程式人生 > >傳遞閉包 -》Warshell演算法

傳遞閉包 -》Warshell演算法

今天有人提到了傳遞閉包,我簡單說說吧。 
所謂傳遞性,可以這樣理解:對於一個節點i,如果j能到i,i能到k,那麼j就能到k。求傳遞閉包,就是把圖中所有滿足這樣傳遞性的節點都弄出來,計算完成後,我們也就知道任意兩個節點之間是否相連。 
傳遞閉包的計算過程一般可以用Warshell演算法描述: 
For 每個節點i Do 
    For 每個節點j Do 
    If j能到i Then 
        For 每個節點k Do 
        a[j, k] := a[j, k] Or ( a[j, i] And a[ i, k] ) 
其中a陣列為布林陣列,用來描述兩個節點是否相連,可以看做一個無權圖的鄰接矩陣。可以看到,演算法過程跟Floyd很相似,三重迴圈,列舉每個中間節點。只不過傳遞閉包只需要求出兩個節點是否相連,而不用求其間的最短路徑長。