Использование обхода в глубину для поиска мостов — различия между версиями
Niko (обсуждение | вклад) |
Niko (обсуждение | вклад) |
||
Строка 59: | Строка 59: | ||
'''if''' <tex>ret[u] > enter[v]</tex> | '''if''' <tex>ret[u] > enter[v]</tex> | ||
ребро <tex>(v, u)</tex> - мост | ребро <tex>(v, u)</tex> - мост | ||
+ | ==Смотри также== | ||
+ | *[[Обход в глубину, цвета вершин|Обход в глубину]] | ||
+ | *[[Использование обхода в глубину для поиска точек сочленения]] | ||
+ | *[[Построение компонент вершинной двусвязности]] | ||
+ | *[[Построение компонент реберной двусвязности]] | ||
+ | *[http://rain.ifmo.ru/cat/view.php/vis/graph-general/biconnected-components-2005| Визуализация поиска мостов] | ||
==Источники== | ==Источники== | ||
− | # http://e-maxx.ru/algo/bridge_searching | + | # [http://e-maxx.ru/algo/bridge_searching| Сайт e-maxx] |
− | # http://en.wikipedia.org/wiki/Bridge_(graph_theory) | + | # [http://en.wikipedia.org/wiki/Bridge_(graph_theory)| Свободная энциклопедия - Википедия] |
==Литература== | ==Литература== | ||
Седжвик Роберт. Фундаментальные алгоритмы на C++. Часть 5: Алгоритмы на графах: Пер. с англ./Роберт Седжвик. — СПб.: ООО «ДиаСофтЮП», 2002. — С. 123-128 | Седжвик Роберт. Фундаментальные алгоритмы на C++. Часть 5: Алгоритмы на графах: Пер. с англ./Роберт Седжвик. — СПб.: ООО «ДиаСофтЮП», 2002. — С. 123-128 |
Версия 00:55, 21 октября 2011
Содержание
Постановка задачи
Дан неориентированный граф
. Найти все мосты в за времяАлгоритм
Теория
Теорема: |
Пусть - дерево обхода в глубину графа . Ребро является мостом тогда и только тогда, когда и из вершины и любого ее потомка нет обратного ребра в вершину или предка |
Доказательство: |
|
Функция
Определим функцию
Лемма: |
Ребро является мостом тогда и только тогда, когда принадлежит дереву обхода в глубину и |
Доказательство: |
Так как на пути от вершины к корню дерева величины | убывают, то возвращает величину для ближайшей к корню вершины, достижимой из или ее потомка, возможно используя одно обратное ребро. Следовательно, из вершины или ее потомков существует обратное ребро потомка или саму тогда и только тогда, когда . По доказанной теореме, отсутствие такого ребра эквивалентно тому что - мост.
Лемма: |
|
Доказательство: |
1) |
Псевдокод
dfs() for всех смежных с if - обратное ребро if вершина - белая dfs(u) if ребро - мост
Смотри также
- Обход в глубину
- Использование обхода в глубину для поиска точек сочленения
- Построение компонент вершинной двусвязности
- Построение компонент реберной двусвязности
- Визуализация поиска мостов
Источники
Литература
Седжвик Роберт. Фундаментальные алгоритмы на C++. Часть 5: Алгоритмы на графах: Пер. с англ./Роберт Седжвик. — СПб.: ООО «ДиаСофтЮП», 2002. — С. 123-128