Изменения

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

Использование обхода в глубину для поиска цикла

291 байт добавлено, 16:54, 22 декабря 2010
Нет описания правки
= Доказательство =
Пусть дан граф <tex>G</tex>. Запустим <tex>dfs(G)</tex>. Рассмотрим выполнение процедуры поиска в глубину от некоторой вершины <tex> v </tex>. Так как все серые вершины лежат в стеке рекурсии, то для них вершина <tex> v </tex> достижима, так как между соседними вершинами в стеке есть ребро. Тогда если из рассматриваемой вершины <tex> v </tex> существует ребро в серую вершину <tex> u </tex>, то это значит, что из вершины <tex> u </tex> существует путь в <tex> v </tex> и из вершины <tex> v </tex> существует путь в <tex> u </tex> состоящий из одного ребра. И так как оба эти пути не пересекаются, то цикл существует цикл.
= Реализация =
print(); // вывод ответа
color[index] = black; // красит вершину в черный цвет
 
== Литература ==
* ''Кормен Т., Лейзерсон Ч., Ривест Р.'' Алгоритмы: построение и анализ.[http://wmate.ru/ebooks/?dl=380&mirror=1] — 2-е изд. — М.: Издательский дом «Вильямс», 2007. — С. 1296.
 
[[Категория: Алгоритмы и структуры данных]]
[[Категория: Обход в глубину]]
Анонимный участник

Навигация