強連通分量-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 求有向圖的強連通分量
- 尋找圖的強連通分量:tarjan演算法簡單理解演算法
- POJ 2186 Popular Cows(強連通分量縮點,Tarjan演算法)演算法
- 強連通------tarjan演算法詳解及與縮點聯合運用演算法
- 20行程式碼實現,使用Tarjan演算法求解強連通分量行程演算法
- 圖論複習之強連通分量以及縮點—Tarjan演算法圖論演算法
- 連通圖演算法詳解之① :Tarjan 和 Kosaraju 演算法演算法
- 強連通分量與縮點(Tarjan演算法)(洛谷P3387)演算法
- 連通圖與Tarjan演算法演算法
- 強連通分量
- HDU 2767 Proving Equivalences Tarjan 強連通縮點UI
- 演算法學習之路|強連通分量+縮點演算法
- 【筆記】tarjian演算法 求強連通分量筆記演算法
- 【演算法學習】tarjan 強連通、點雙、邊雙及其縮點 重磅來襲!!!!演算法
- 強連通分量及縮點 演算法解析及例題演算法
- 全網最!詳!細!Tarjan演算法講解。演算法
- 強連通圖的演算法演算法
- Trajan演算法(強連通+縮點)演算法
- HDU2767Proving Equivalences[強連通分量 縮點]UI
- 求有向圖的強連通分量(c語言版)C語言
- Tarjan演算法及其應用 總結+詳細講解+詳細程式碼註釋演算法
- Tarjan演算法_縮點演算法
- 抓間諜(強連通)
- 模板引擎使用詳解:包含公共模板
- 【演算法詳解】有環連結串列演算法
- 邊分治維護強連通分量(CF1989F,P5163)
- API模板方法詳解API
- tarjan—演算法的神(一)演算法