Tarjan 演算法求割點 割邊 強聯通分量

2022-08-17 01:27:19 字數 2158 閱讀 4481

該演算法的手動模擬詳細dfn[ i ] : 在dfs中該節點的時間戳

low[ i ] : 為i能追溯到最早的時間戳

tarjan(u, father)

#include using

namespace

std;

const

int maxn = 1000 + 7

;vector

g[maxn];

intn, m, root;

intnum[maxn], low[maxn],flag[maxn], index;

setans;

void dfs(int cur, int

father)

if(cur == root && child == 2) //

如果是根節點, 那麼至少有2個孩子才是割點

flag[cur] = 1;//

這裡其實是》=2, 但因為dfs搜到第二個孩子就會把該點認為是割點

}

else

if(v != father)//

如果 v不是cur的父親, 而且被訪問過, 說明v是cur的祖先,要更新low[cur]

}return;}

intmain()

root = 1;//

標記根節點

dfs(1

, root);

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

if(flag[i] == 1) printf("

%d "

, i);

puts(

"");

}return0;

}割點實現**

割點實現**

tarjan(u, father)

#include using

namespace

std;

const

int maxn = 1000 + 7

;vector

g[maxn];

intn, m, root;

intnum[maxn], low[maxn],flag[maxn], index;

void dfs(int cur, int

father)

}else

if(v != father)//

如果 v不是cur的父親, 而且被訪問過, 說明v是cur的祖先,要更新low[cur]

}return;}

intmain()

root = 1;//

標記根節點

dfs(1

, root);

puts(

"");

}return0;

}

割邊實現**

tarjan(u)

#include #include 

#include

#include

#include

using

namespace

std;

const

int maxn = 5678

;vector

g[maxn];

intn , m;

intdfn[maxn], low[maxn], color[maxn], out_degree[maxn];

int dfs_num = 1, col_num = 1

;bool vis[maxn];//

標記元素是否在棧中

stacks;

void tarjan(int

u)

else

if(vis[v]) //

如果v在棧中

}if(dfn[u] ==low[u])

col_num++;

}}int

main()

//因為圖不一定連通, 所以每個頂點都要訪問一次

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

//輸出強連通分量

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

puts(

"");

}return0;

}

強連通分量實現

部分實現參考《啊哈演算法》

tarjan演算法求割點割邊

在上一節我們已經知道tarjan演算法可以求聯通圖,在這裡我們也運用tarjan的思想求割點與割邊,首先我們先來說說割點,那麼什麼事割點呢,先來看一張圖 a 來自網路 在 a 圖中,我們將a點以及與a點相連的邊全部去除,會發現這個聯通圖被分成了倆個聯通圖,乙個是節點f,另外乙個是餘下的所有的節點組成...

tarjan求割邊割點

內容及 來自 割邊 在連通圖中,刪除了連通圖的某條邊後,圖不再連通。這樣的邊被稱為割邊,也叫做橋。割點 在連通圖中,刪除了連通圖的某個點以及與這個點相連的邊後,圖不再連通。這樣的點被稱為割點。dfs搜尋樹 用dfs對圖進行遍歷時,按照遍歷次序的不同,我們可以得到一棵dfs搜尋樹。樹邊 在搜尋樹中的藍...

Tarjan求強連通 縮點 割點 割邊

1.如果乙個無向圖中每個頂點從所有其他頂點都是可達的,則稱該圖是連通的。圖的連通分量 從.可達 的等價類.2.如果乙個有向圖中任意兩點互相可達,則該有向圖是強連通的 相互可達 等價類 3.有向圖g v,e 的強連通分量是乙個最大節點集合c包含於v,對於該集合中任意節點u,v,節點u,v可以相互到達 ...