Ottenere un ciclo negativo usando Bellman Ford


20

Devo trovare un ciclo negativo in un grafico ponderato diretto. So come funziona l'algoritmo Bellman Ford e che mi dice se esiste un ciclo negativo raggiungibile. Ma non lo nomina esplicitamente.

Come posso ottenere il percorso effettivo del ciclo?v1,v2,vk,v1

Dopo aver applicato l'algoritmo standard abbiamo già eseguito iterazioni e non dovrebbero essere possibili ulteriori miglioramenti. Se possiamo ancora ridurre la distanza da un nodo, esiste un ciclo negativo.n1

La mia idea è: poiché conosciamo il bordo che può ancora migliorare il percorso e conosciamo il predecessore di ciascun nodo, possiamo risalire da quel bordo fino a quando non lo incontriamo di nuovo. Ora dovremmo avere il nostro ciclo.

Purtroppo, non ho trovato alcun documento che mi dica se questo è corretto. Quindi funziona davvero così?

Modifica: questo esempio dimostra che la mia idea è sbagliata. Dato il seguente grafico, eseguiamo Bellman-Ford dal nodo .1

inserisci qui la descrizione dell'immagine

Elaboriamo i bordi nell'ordine . Dopo n - 1 iterazioni otteniamo le distanze dei nodi: 1 : - 5 2 : - 30 3 : - 15a,b,c,dn1
1:5
2:30
3:15

e tabella padre:
ha padre 3 2 ha padre 3 3 ha padre 213
23
32

n1aa

c,da

come possiamo risolvere questo problema?

Risposte:


14

v1

s


il collegamento è interrotto.
human.js,


Ho appena usato l'idea del Prof. Huang, ma non capisco perché aggiunga sia un nuovo nodo sorgente sia un nuovo obiettivo ( s'e t'). Mi è sembrato che un nuovo nodo sorgente, collegato a tutti i vertici esistenti da un bordo di qualsiasi lunghezza, avrebbe sollevato tutti i cicli.
AbuNassar,

0

Il tuo esempio non contraddice la tua idea. In effetti hai trovato un ciclo negativo. Penso che l'idea che illustra il tuo esempio sia che il vertice di origine potrebbe non essere un nodo nel ciclo negativo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.