Изменения

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

Алгоритм Форда-Беллмана

9 байт добавлено, 20:27, 29 декабря 2012
м
Нахождение отрицательного цикла
==Нахождение отрицательного цикла==
:Приведенная выше реализация позволяет определить наличие в графе цикла отрицательного веса. Чтобы найти сам цикл, достаточно сохранять массив вершин из которых производится релаксация. Тогда, если после <tex> \mid V \mid - 1 </tex> итерации найдется вершина <tex> u v </tex>, расстояние до которой можно уменьшить, то эта вершина либо лежит на каком-нибудь цикле отрицательного веса, либо достижима из него. Чтобы найти вершину, которая лежит на цикле, можно <tex>\mid V \mid - 1</tex> раз пройти назад по предкам из вершины <tex>uv </tex>. Так как наибольшая длина пути в графе из <tex>\mid V \mid</tex> вершин равна <tex>\mid V \mid - 1</tex>, то полученная вершина <tex>vu </tex> будет гарантированно лежать на отрицательном цикле. Теперь, зная, что вершина <tex>vu </tex> лежит на цикле отрицательного веса, можно пройти из нее по предкам, пока не придем в эту же вершину <tex>vu </tex>, а это обязательно произойдет, так как в цикле отрицательного веса релаксации происходят по кругу.
'''Neg_Cycle(G, s)'''
'''break'''
'''return''' <tex> ans </tex>
 
== Источники ==
:Кормен, Т., Лейзерсон, Ч., Ривест, Р., Штайн, К. Алгоритмы: построение и анализ / пер. с англ. — изд. 2-е — М.: Издательский дом «Вильямс», 2009. — с.672 — 676. — ISBN 978-5-8459-0857-5.
78
правок

Навигация