Tarjan演算法 模板

2021-08-17 21:34:08 字數 784 閱讀 3632

只是下一下模板,如果還是沒有懂得原理的,可以看一下這位大牛的部落格:

#include #include #include #include using namespace std;

const int maxn = 1100;

struct node

edge[maxn];

int head[maxn];

int dfn[maxn],low[maxn];

int vis[maxn],stact[maxn];

int tot,cnt,index;

void add(int xx,int y) //前向星

void tarjan(int x)

else if(vis[v]) //如果這個點已經在棧中了,那麼正在遍歷的這個點的low就要指向他的父親節點,也就是小的那個

low[x] = min(low[x],dfn[v]); //比較誰是誰的兒子

}if(low[x] == dfn[x]) //表示在x之後在都在乙個連通分量裡面,所以要全部輸出

while(x != stact[index+1]);

printf("\n");

}return ;

}int main()

for(int i = 1; i <= n;i ++)

if(!dfn[i])

tarjan(i);

return 0;

}

關於tarjan演算法的應用有很多,後面爭取盡快整理出來,不光光只是模板......

Tarjan演算法模板

tarjan演算法是根據棧和dfs來實現。每個點有2個資料 dfn和low 結點1的dfn為1,low也為1,然後dfs到3,3的dfn為2,low為2,每次訪問乙個就dfn 當訪問的時候時是棧中結點時,就將low變為那個棧中結點的dfn,這樣可以保證low與dfn不相同。如果訪問不到棧中的結點,就...

Tarjan演算法模板

一 tarjan有向圖的強連通 tarjan const int maxn 200100 const int maxm 500100 struct edgeedge maxm int head maxn tot int low maxn dfn maxn stack maxn belong maxn...

Tarjan演算法 模板

演算法思想 首先要明確強連通圖的概念,乙個有向圖中,任意兩個點互相可以到達 什麼是強連通分量?有向圖的極大連通子圖叫強連通分量。給乙個有向圖,我們用tarjan演算法把這個圖的子圖 在這個子圖內,任意兩個點可以相互到達,極大的子圖 縮成乙個點,相當於化簡 怎樣去做 從乙個點開始遍歷它能走到的下乙個點...