傳遞閉包 -》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很相似,三重迴圈,列舉每個中間節點。只不過傳遞閉包只需要求出兩個節點是否相連,而不用求其間的最短路徑長。
相關推薦
離散題目18 求傳遞閉包 warshell演算法
Problem Description 給出一個集合A和A上的關係R,求關係R的傳遞閉包。 例如: A={0,1,2} , R={<0,0>,<1,0>,<2,2>,<1,2>,<2,1>}
傳遞閉包 -》Warshell演算法
今天有人提到了傳遞閉包,我簡單說說吧。 所謂傳遞性,可以這樣理解:對於一個節點i,如果j能到i,i能到k,那麼j就能到k。求傳遞閉包,就是把圖中所有滿足這樣傳遞性的節點都弄出來,計算完成後,我們也就知道任意兩個節點之間是否相連。 傳遞閉包的計算過程一般可以用Warshell演算法描述: For 每個節點i D
Gym 101873D - Pants On Fire - [warshall演算法求傳遞閉包]
題目連結:http://codeforces.com/gym/101873/problem/D 題意: 給出 $n$ 個事實,表述為 "XXX are worse than YYY"。再給出 $m$ 個某人說的話,也是表述為 "XXX are worse than YYY",對於每句話都要
離散數學 Warshall演算法求傳遞閉包 C語言實現
求傳遞閉包有一種有效演算法—Warshall演算法,這種演算法也便於計算機實現。 (1)置新矩陣A=M; (2)i=1; (3)對所有j如果A[j,i]=1,則對k=1,2,…,n,A[j,k]=A[j,k]∨A[i,k](這裡的加是布林加); (4)i加1;(i
Warshall(沃舍爾)演算法求傳遞閉包
1.離散數學定義: t(R) = R u R^2 u R^3 u..... 其中R^(n+1) = R^n 複合 R 矩陣表示: M(R) = M + M^2 + M^3 +....+M^n(其中加為邏輯加) 所以我們只要按照這個公式每次更新M,最後的Mn就是傳遞閉包
Warshall傳遞閉包演算法的學習與實現
1、問題引入 一個有n個頂點的有向圖的傳遞閉包為:有向圖中的初始路徑可達情況可以參見其鄰接矩陣A,鄰接矩陣中A[i,j]表示i到j是否直接可達,若直接可達,則A[i,j]記為1,否則記為0;兩個有向圖中i到j有路徑表示從i點開始經過其他點(或者不經過其他點)能夠到達j點
Warshall演算法求傳遞閉包
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; const i
Floyd演算法求圖的傳遞閉包
Floyd演算法的一個應用吧 /* 設R是非空集合上的關係,R的傳遞閉包是A上的關係R',使得R'滿足以下條件: 1)、R'是傳遞的 2)、R是R'的子集 3)、對A上的任何包含R的傳遞關係R'',有 R'是R''的子集 下面是用Folyd-Warshall演算法來解 */
【離散數學】Warshall演算法實現 傳遞閉包對應矩陣
測試樣例,資料拿離散書上Page 124頁測的: /* 7 1 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0
WARSHALL演算法計算傳遞閉包
考慮n+1個矩陣的序列M0,M1,……,Mn,將矩陣Mk的第i行記作Mk[i,j]. 對於k=0,1,……,n,Mk[i,j]=1當且僅當在R的關係圖中存在一條從xi到xj路徑,並且這條路徑除了端點外中間只經過{x1,x2,……,xk}中的結點。WARSHALL
Floyd-Warshall演算法求矩陣的傳遞閉包
有向圖的傳遞閉包表示從鄰接矩陣A出發,求的所有節點間的路徑可達情況 int vis[N][N];//鄰接矩陣,vis[i][j]=1表示i到j可達; void warshall(int x,int y
C++實現離散數學的關系類,支持傳遞閉包運算
nts bsp ostream oid 之間 end c++ ati AI 1 #include <vector> 2 #include <cassert> 3 #include <iostream> 4 using n
傳遞閉包(例題POJ3660)
blog set stream 博客 floyd LG ont 有關 csdn 概念: 傳遞一種關系,例如 a//b b//c 則 a//c 從已知的初始關系中 推出最後所有對象之間的關系 初始時把所有有關系的標記為1 即a[i][j] = 1 然後用Floyd
有向圖傳遞閉包
題目 有向圖 class 時間 .com all 數據約束 htm 其中 目錄 傳遞閉包的定義 Floyd warshall 傳遞閉包算法 Floyd warshall 代碼 算法實現原理 Floyd warshall 傳遞閉包算法的實現 時間復雜度 DFS 傳遞閉包算
floyd騷操作——傳遞閉包
name its for %s ebe 所有 分享圖片 main cstring 傳遞閉包的含義指通過傳遞性推導出盡量多的元素之間的關系,而傳遞閉包一般都是采用floyd算法。 下面用兩道題來實現傳遞閉包: Problem 1(POJ3660): 題目鏈接:http:
poj 3660 Cow Contest (floyd傳遞閉包)
題意:有n頭牛比賽,m種比賽結果,最後問你一共有多少頭牛的排名被確定了,其中如果a戰勝b,b戰勝c,則也可以說a戰勝c,即可以傳遞勝負。求能確定排名的牛的數目。 程式碼如下。。。。floyd處理一下 #include<stdio.h> #include<iost
poj 2594 Treasure Exploration (floyd傳遞閉包+最小路徑覆蓋) (bitset優化floyd)
這道題為有向圖有相交邊的情況。。不能直接求最大匹配 先用floyd處理一下邊 // // main.cpp // wzazzy // // Created by apple on 2018/10/23. // Copyright © 2018年 apple. All rights r
Floyd傳遞閉包的應用 POJ 3660
題目連結:http://poj.org/problem?id=2240 題解:應用Floyd的演算法,不求路徑,而是標記任意兩點之間是否可達。然後根據出度+入度是否等於頂點數-1來判斷該頂點在所有頂點中的排名是否確定。因為如果出度+入度是否等於頂點數-1,則其他頂點到與該頂點的關係則都確認了,所
poj1094 Sorting It All Out(傳遞閉包)
題目 poj1094 Sorting It All Out 題解 Floyd解決 傳遞閉包 若有A<B,那麼連邊(A,B,1),即d[A][B]=1。 如果有A<B,且B<C,對應有d[A][B]=1,d[B][C]=1,在Floyd演算法中,會使 d[A][C]
poj1094 Sorting It All Out【floyd】【傳遞閉包】【拓撲序】
Sorting It All Out Time Limit: 1000MS Memory Limit: 10000K Total Submissions:39731 &nb