
53. Двусвязность. Алгоритм определения двусвязности графа.
Если граф не одержит точек разделения, то он называется двусвязным или неразделимым. Максимальный подграф называется двусвязной компонентой или блоком. Для определения точек сочленения – последовательно убирать точки и анализировать, распадается ли граф на несвязные компоненты.
Алгоритм BICONNECTIVITY(G)
1.num ←0, stack ←Ø
2.for each v V do Num[v] ←0, L[v] ←0
3.for each v V do
4.if Num[v]=0 then
Block(v,a)
1.num ← num+1
2.Num[v] ←num
3.L[v] ←num
4.for each w V, смежные c V do
5.if Num[w]=0 then
6.stack ←(v,w)
7.Block(w,v)
8.L[v] ←Min(L[v],L[w])
9.if L[w]≥Num[v] then
10.repeat
11.(v1, w1) ←stack
12.printf “(v1,w2)”
13.until(v1, w1) = (v,w)
14.else if(Num[w] ←Num[v]) and (w≠u) then
15.stack
16.L[v] ←Min(L[v], Num[v])
17.end if
18.end if
19.end if
20.end for
Метка вершины сочленения получает минимальный номер из всех вершин блока. Вычислительная сложность: О(n+m)