7 4 4關節點和重連通分量

2021-10-18 10:36:57 字數 1362 閱讀 3064

圖 7.20 所示為從頂點 a 出發深度優先搜尋遍歷圖 g~5~所得的深度優先生成樹,圖中實線表示樹邊虛線表示回邊(即在圖中但不在 生成樹上的邊)。

對樹中任一頂點 v 而言,其孩子結點為在它之後搜尋到的鄰接點,而其雙親結點由回邊聯結的祖先結點是在它之前搜尋到的鄰接點。

1、若生成樹的根有兩棵或兩棵以上的子樹,則此根必為關節點。因為圖中不存在聯結不同子樹中頂點的邊,因此若刪去根頂點生成樹便變成生成森林,如上圖 7.20 中的頂點 a

2、若生成樹中某個非葉子頂點v,其某一棵子樹的根該子樹中的其他結點均沒有指向 v 的祖先的回邊,則 v 為關節點。 因為若刪去 v,則其子樹和圖的其他部分被分割開來,如上圖 7.20 中的頂點 b、d 和 g。

#define max_vertex_num 20

typedef

struct arcnode

arcnode;

// 表中結點,表示一條弧(也可以是一條邊)

typedef

struct vnode

vnode, adjlist[max_vertex_num];

typedef

struct

algraph;

void

findarticul

(algraph g)

p = g.vertices[0]

.firstarc;

v = p->adjvex;

dfsarticul

(g, v);if

(count < g.vexnum)}}

}void

dfsarticul

(algraph g,

int v0)

if(low[w]

>= visited[v0]

)// 此為關節點

}else

if(visited[w]

< min)

} low[v0]

= min;

// 返回前求得 v0 的值

}

關節點 橋 關節點和橋模板 Tarjan

include include include using namespace std const int n 1e5,m 1e5 struct edge edge int v,int next,int idx v v next next idx idx e m int dfn n deep,hea...

重連通分量的求解

提兩點 1.對於每個點連通分量,都是根據割點來找的。2.邊入棧,到當前邊等於棧頂時停止出棧。3.割點屬於多個點連通分量。鄰接矩陣 view code include include define maxn 22 define maxm 444 define inf 1000000000 int mi...

點連通分量 邊連通分量 割點和橋 強連通分量

老是搞不清他們的關係,不知道該用那份 今天理了一下,整理一下模板 點連通分量 可以求出點連通分量包含哪些點,那個點屬於那個連通分量 struct edge int pre maxn iscut maxn bccno maxn dfs clock,bcc cnt vectorg maxn bcc ma...