Je dois trouver un cycle négatif dans un graphique pondéré dirigé. Je sais comment fonctionne l'algorithme de Bellman Ford et qu'il me dit s'il y a un cycle négatif atteignable. Mais il ne le nomme pas explicitement.
Comment puis-je obtenir le chemin réel du cycle?
Après avoir appliqué l'algorithme standard, nous avons déjà effectué itérations et aucune autre amélioration ne devrait être possible. Si nous pouvons encore réduire la distance à un nœud, un cycle négatif existe.
Mon idée est la suivante: puisque nous connaissons le bord qui peut encore améliorer le chemin et que nous connaissons le prédécesseur de chaque nœud, nous pouvons retracer notre chemin depuis ce bord jusqu'à ce que nous le rencontrions à nouveau. Maintenant, nous devrions avoir notre cycle.
Malheureusement, je n'ai trouvé aucun article me disant si c'est correct. Alors, ça marche vraiment comme ça?
Edit: Cet exemple prouve que mon idée est fausse. Étant donné le graphique suivant, nous exécutons Bellman-Ford à partir du nœud .
Nous traitons les arêtes dans l'ordre . Après itérations, nous obtenons les distances des nœuds:
et table parent: a parent a parent a parent
Maintenant, en faisant la ième itération, nous voyons que la distance du nœud peut encore être améliorée en utilisant l'arête . Nous savons donc qu'il existe un cycle négatif et en fait partie.
Mais, en retraçant notre chemin à travers la table parent, nous nous retrouvons coincés dans un autre cycle négatif et ne rencontrons plus jamais .
Comment pouvons-nous résoudre ce problème?
la source
s'
ett'
). Il me semblait qu'un nouveau nœud source, connecté à tous les sommets existants par une arête de n'importe quelle longueur, ferait remonter tous les cycles.Votre exemple ne contredit pas votre idée. En effet, vous avez trouvé un cycle négatif. Je pense que l'idée que votre exemple illustre est que le sommet source pourrait ne pas être un nœud dans le cycle négatif.
la source