強連通分量-tarjan演算法模板詳解
對於基本的演算法過程在這裡推薦一位大牛的分析:有向圖強連通分量的tarjan演算法
分析中結合圖形模擬演算法過程,我也是看了這位大牛的文章之後入門tarjan演算法,但是大牛的程式碼中沒有註釋,自己比較笨,看大牛的程式碼也用了很長時間理解,這裡給出大牛的程式碼模板結合自己的詳細解釋,希望以後自己來看一目瞭然,也希望能幫助剛接觸tarjan演算法的人更快理解
下面是大牛的程式碼(一些變數名有改動,希望更有助理解)
int top;//這個是用作棧頂的指標
int Stack[MAX];//維護的一個棧
bool instack[MAX];//instack[i]為真表示i在棧中
int DFN[MAX],LOW[MAX];
int Belong[MAX];//Belong[i] = a; 表示i這個點屬於第a個連通分量
int Bcnt,Dindex;//Bcnt用來記錄連通分量的個數,Dindex表示到達某個點的時間
void tarjan(int u)
{
int v;
DFN[u]=LOW[u] = ++ Dindex;//這裡要注意 Dindex是初始化為0,這裡就不能 Dindex++; 不然第一個點的DFN和LOW就為0
Stack[++ top] = u;
instack[u] = true;
for (edge *e = V[u] ; e ; e = e->next)//對所有可達邊的搜尋
{
v = e->t;
if (!DFN[v])//這個if 就是用來更新LOW[u]
{
tarjan(v);
if (LOW[v] < LOW[u])
LOW[u] = LOW[v];
}
else if (instack[v] && DFN[v] < LOW[u])
LOW[u] = DFN[v];
}
if (DFN[u] == LOW[u])//這裡表示找完一個強連通啦
{
Bcnt ++;//強連通個數加1
do
{
v = Stack[top --];
instack[v] = false;
Belong[v] = Bcnt;
}
while (u != v);//一直到v=u都是屬於第Bcnt個強連通分量
}
}
void solve()
{
int i;
top = Bcnt = Dindex = 0;
memset(DFN,0,sizeof(DFN));
for (i = 1; i <= N ; i ++)//這裡是一定要對所有點tarjan才能求出所有的點的強連通分量
if (!DFN[i])
tarjan(i);
}
如果對模板也比較熟悉就試著做 hdu1269迷宮城堡---就是判斷給出的圖是否為一個強連通,簡單的模板題
個人愚昧觀點,歡迎指正與討論
相關文章
- kosaraju 和 tarjan演算法詳解(強連通分量)演算法
- 【模板】tarjan 強連通分量縮點
- 強連通分量(Tarjan演算法)演算法
- Tarjan演算法(強連通分量分解)演算法
- 圖論——強連通分量(Tarjan演算法)圖論演算法
- Tarjan求強連通分量
- 強聯通分量tarjan
- Tarjan 求有向圖的強連通分量
- 尋找圖的強連通分量:tarjan演算法簡單理解演算法
- 強連通------tarjan演算法詳解及與縮點聯合運用演算法
- 連通圖演算法詳解之① :Tarjan 和 Kosaraju 演算法演算法
- 20行程式碼實現,使用Tarjan演算法求解強連通分量行程演算法
- 連通圖與Tarjan演算法演算法
- 強連通分量
- UVA1327 && POJ1904 King's Quest(tarjan+巧妙建圖+強連通分量+縮點)
- tarjan[模板]
- 【演算法學習】tarjan 強連通、點雙、邊雙及其縮點 重磅來襲!!!!演算法
- 強連通分量及縮點 演算法解析及例題演算法
- POJ 1236 Network of Schools 強連通分量
- 無向連通圖點雙連通分量
- 無向連通圖邊雙連通分量
- 【筆記/模板】無向圖的雙連通分量筆記
- 有向圖的強連通分量 模版
- UVA-11504 - Dominos(有向圖的強連通分量)
- Day7 割點、割邊和強連通分量
- Tarjan演算法及其應用 總結+詳細講解+詳細程式碼註釋演算法
- Tarjan演算法_縮點演算法
- 邊分治維護強連通分量(CF1989F,P5163)
- Day8 雙連通分量
- tarjan—演算法的神(一)演算法
- 抓間諜(強連通)
- Tarjan(連通性相關) 筆記筆記
- 強聯通分量及縮點法
- tarjan演算法求scc & 縮點演算法
- Tarjan 演算法學習筆記演算法筆記
- 【Tarjan 拓撲排序 dp】P3387 【模板】縮點排序
- GaussDB(DWS)叢集通訊:詳解pooler連線池
- 有向圖的連通性(判強連通)
- POJ 3694 Network 邊雙連通分量+LCA