Uzyskiwanie ujemnego cyklu za pomocą Bellmana Forda

20

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?v1,v2,vk,v1

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.n1

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 .1

wprowadź opis zdjęcia tutaj

Krawędzie przetwarzamy w kolejności . Po n - 1 iteracjach otrzymujemy odległości między węzłami: 1 : - 5 2 : - 30 3 : - 15a,b,c,dn1
1:5
2:30
3:15

a tabela nadrzędna:
ma nadrzędny 3 2 ma nadrzędny 3 3 ma nadrzędny 213
23
32

n1aa

c,da

Jak możemy rozwiązać ten problem?

Patrick Schmidt
źródło

Odpowiedzi:

14

v1

s

Paresh
źródło
link jest zepsuty.
human.js,
Właśnie wykorzystałem pomysł profesora Huanga, ale nie rozumiem, dlaczego dodaje zarówno nowy węzeł źródłowy, jak i nowy cel ( s'i t'). Wydawało mi się, że nowy węzeł źródłowy, połączony ze wszystkimi istniejącymi wierzchołkami krawędzią o dowolnej długości, podświetli wszystkie cykle.
AbuNassar,
0

Twój przykład nie jest sprzeczny z twoim pomysłem. Rzeczywiście znalazłeś cykl ujemny. Myślę, że ideą, którą ilustruje twój przykład, jest to, że wierzchołek źródłowy może nie być węzłem w cyklu ujemnym.

Spartan 117
źródło