Muszę znaleźć cykl ujemny na ukierunkowanym wykresie ważonym. Wiem, jak działa algorytm Bellmana Forda i który mówi mi, czy istnieje możliwy do osiągnięcia cykl ujemny. Ale nie określa go wprost.
Jak uzyskać rzeczywistą ścieżkę cyklu?
Po zastosowaniu standardowego algorytmu wykonaliśmy już iteracji i dalsza poprawa nie powinna być możliwa. Jeśli nadal możemy obniżyć odległość do węzła, istnieje cykl ujemny.
Mój pomysł jest następujący: ponieważ znamy krawędź, która wciąż może poprawić ścieżkę i znamy poprzednika każdego węzła, możemy prześledzić drogę powrotną od tej krawędzi, dopóki nie spotkamy się ponownie. Teraz powinniśmy mieć nasz cykl.
Niestety nie znalazłem żadnego dokumentu, który powiedziałby mi, czy to prawda. Czy to naprawdę tak działa?
Edycja: Ten przykład dowodzi, że mój pomysł jest błędny. Biorąc pod uwagę poniższy wykres, uruchamiamy Bellman-Ford od węzła .
Krawędzie przetwarzamy w kolejności . Po n - 1 iteracjach otrzymujemy odległości między węzłami: 1 : - 5 2 : - 30 3 : - 15
a tabela nadrzędna:
ma nadrzędny 3 2 ma nadrzędny 3 3 ma nadrzędny 2
Jak możemy rozwiązać ten problem?