強連通分量總結

2022-03-14 18:28:26 字數 682 閱讀 1006

理論知識:

定義:在有向圖中如果兩個頂點之間,有一條u到v的通路,同時還有一條v到u的通路則稱這兩個點強連通,如果有向圖的任意兩個頂點都是強連通則稱這個圖為強連通圖

有向圖的極大強連通子圖成為強連通分量。

極大強連通子圖:乙個圖的頂點中兩兩之間強連通的最大的頂點的集合稱為極大強連通子圖,強連通圖的極大強連通子圖就是它本身,

極小連通子圖只存在於與聯通的無向圖中,之所以說它極小,是因為極小連通子圖只要求包含圖中所有頂點及其比頂點數量少乙個的邊(且不能成環),也就是說如果給極小連通子圖任意兩個頂點間加入一條邊,則必有環.

求法:運用tarjan演算法求解:tarjan演算法中有兩個陣列low和dfn,陣列low儲存當前點所在的強連通子圖所在的搜尋子樹的根節點的dfn值,dfn陣列儲存在這個搜尋子樹中當前點是第幾個搜尋到的

tarjan演算法步驟:

1、當第一次搜尋時,當前點的dfn值和low值都是0;

2、將當前搜尋到的點u入棧,

3、找到所有與u相連的點,如果這個點沒被搜尋過則對其進行tarjan演算法的搜尋(此處使用回溯),並且將low[u]和dfn[u]中較小的乙個賦值給low[u],如果這個點被搜尋過,即並且在棧中,將low[u]和dfn[v](v是與u相連的乙個頂點)中較小的賦值給low[u],

4、最後搜尋到low[u]==dfn[u]結束,因為強連通子圖必然成環,刪除棧中元素,取消入棧標記

強連通分量 tarjan求強連通分量

雙dfs方法就是正dfs掃一遍,然後將邊反向dfs掃一遍。挑戰程式設計 上有說明。雙dfs 1 include 2 include 3 include 4 include 5 6using namespace std 7const int maxn 1e4 5 8 vector g maxn 圖的鄰...

強連通分量

對於有向圖的乙個頂點集,如果從這個頂點集的任何一點出發都可以到達該頂點集的其餘各個頂點,那麼該頂點集稱為該有向圖的乙個強連通分量。有向連通圖的全部頂點組成乙個強連通分量。我們可以利用tarjan演算法求強連通分量。define n 1000 struct edge e 100000 int ec,p...

強連通分量

在有向圖g中,如果兩個頂點間至少存在一條路徑,稱兩個頂點強連通 strongly connected 如果有向圖g的每兩個頂點都強連通,稱g是乙個強連通圖。非強連通圖有向圖的極大強連通子圖,稱為強連通分量 strongly connected components 下圖中,子圖為乙個強連通分量,因為...