傳遞閉包的計算 Warshall

2021-10-05 16:46:39 字數 987 閱讀 7128

o(n^3)的高效閉包演算法

演算法內容:1.做出關係r的矩陣m

2.列舉每一列,以這一列對應的元素為中間元素去創造新的關係(一行一行來做,如果當前行對應的元素與列對應的元素有關係,例如arb,則考慮有無關係,若有關係則ar…,具體實現就是m[a][…] |= m[b]…

有點類似於多源最短路演算法,也是一種動態規劃的思想,假設當前列舉到i列,此時矩陣就是只借助前i個點進行擴充套件,這時候矩陣的結果已經是站在借助前i-1個節點擴充套件過的結果了,所以此時擴充套件得來的關係未必只借助了i點,可能還借助了1-i-1的若干點,而這也就是這個演算法的巧妙之處所在。

另外,wallshall演算法在離散數學中還是比較重要的,偏序關係的哈斯圖cover關係的求解以及可達矩陣的求解都用到了wallshall演算法。

**實現:

# include

# include

using namespace std;

const

int max_n =

100;

bool matrix[max_n]

[max_n]

;int n;

map<

char

,int

> ma_1;

map<

int,

char

> ma_2;

intmain()

cout <<

"輸入各關係:\n"

;char a, b;

while

(cin >> a >> b)

matrix[ma_1[a]

][ma_1[b]]=

1;for(

int i =

0; i < n; i++)}

}}for(

int i =

0; i < n; i++)}

}system

("pause");

return0;

}

warShall演算法實現傳遞閉包的計算(C 版)

warshall通俗的講就是計算有向圖的傳遞閉包,進而轉化為乙個圖結構中任意兩點的可達情況 該演算法的時間複雜度為o n 3 include using namespace std int count 用來計算判斷次數 const int n 10 二維陣列可以沒有行,但必須有列,這裡假定最大階為1...

關係傳遞閉包Warshall演算法之思想的一種解說

關係傳遞閉包warshall演算法之思想的一種解說 周曉煒 西安郵電學院計算機系網路0407班 西安 710121 注 本文已發表在 中國科技 網 http www.kjlw.cn 為http www.kjlw.cn show2.asp?newsid 763 需註冊成為會員才能瀏覽 1 引言 war...

Warshall傳遞閉包演算法的學習與實現

warshall傳遞閉包演算法的學習與實現 1 問題引入 乙個有n個頂點的有向圖的傳遞閉包為 有向圖中的初始路徑可達情況可以參見其鄰接矩陣a,鄰接矩陣中a i,j 表示i到j是否直接可達,若直接可達,則a i,j 記為1,否則記為0 兩個有向圖中i到j有路徑表示從i點開始經過其他點 或者不經過其他點...