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點開始經過其他點 或者不經過其他點...