Изменения

Перейти к: навигация, поиск

Построение компонент рёберной двусвязности

265 байт убрано, 08:33, 22 ноября 2011
Нет описания правки
Можно найти компоненты реберной двусвязности за один проход, используя стек.
Алгоритм, если Рекурсивый алгоритм на основе обхода в глубину.Если мы посетили вершину, то добавляем её в стек. Так же как раньше <tex>ret[v]</tex> и <tex>enter[v]</tex>. Теперь определим, когда надо окрасить компоненту.Если мы возвращаясь (в рекурсии) обратно оказались в вершине, которая является вершиной моста, то все вершины, находящиеся, до текущей в стеке, принадлежат этой компоненте. Это следует из того, что [[Граф компонент реберной двусвязности | граф блоков и мостов, является деревом]]. По свойству обхода в ширинуглубину, мы окажемся в висячей вершине, покрасим её, то есть эту компоненту покрасим. Её можно выкинут и рассматривать оставшийся граф. Действуя по аналогии мы всегда выкидываем компоненту реберной двусвязности следовательно, если мы вернулись в вершину, которая была концом нашего моста, то все вершины лежащие до нашей в стеке, принадлежат данной компоненте, либо если моста нет, то окрашиваемся всё, что лежит в стеке.
Псевдокод:
'''void paint(int v):
maxcolor++;
while (пока вершина стека не вершина <tex>v</tex> и стек не пустой)
извлекаем вершину стека и красим её;
'''void dfs(вершина v, предок вершины p):
добавляем вершину в в стек;
state[v] = 1; ret[v] = enter[v] = ++time;
для всех вершин u смежных v:
если (u == parent):
переходим к следующей итерации
если (state[u] = 1):
ret[v] = min(ret[v], enter[u]);
иначе:
если (state[u] = 0):
dfs(u, v); ret[v] = min(ret[v], ret[u]);
если (enter[v] < ret[u]):
paint(u); state[v] = 2;
Итоговое время работы алгоритма <tex> O(|V| + |E|)</tex>.
== См. также Визуализатор ==* [[Обход в глубину, цвета вершин|Oбхода в глубину]]* [[Использование обхода в глубину для поиска точек сочленения]]* [[Построение компонент вершинной двусвязности]]* [[Использование обхода в глубину для поиска мостов]]
* [http://rain.ifmo.ru/cat/view.php/vis/graph-general/bridges-2001| Визуализация построение компонент реберной двусзяности]
152
правки

Навигация