有向グラフで負のサイクルを見つけなければなりません。ベルマンフォードアルゴリズムの仕組みと、到達可能な負のサイクルがあるかどうかがわかります。ただし、明示的に名前を付けるわけではありません。
サイクルの実際のパスを取得するにはどうすればよいですか?
標準アルゴリズムを適用した後、すでに回の反復を行っているため、それ以上の改善は不可能です。それでもノードまでの距離を短くできる場合は、負のサイクルが存在します。
私のアイデアは次のとおりです。パスを改善できるエッジと各ノードの先行ノードを知っているので、再びエッジに到達するまでそのエッジからさかのぼることができます。これでサイクルができました。
悲しいことに、これが正しいかどうかを伝える論文は見つかりませんでした。それで、実際にそのように機能しますか?
編集:この例は、私の考えが間違っていることを証明しています。次のグラフを考えると、ノードからBellman-Fordを実行します。
エッジを順に処理します。回の反復の後、ノード距離を取得します:n − 1
2 :− 30 3 :− 15
そして親テーブル:親持ち親持ち親を持っている
3 2 3 3 2
今、実行反復目我々は、ノードの距離がわかり依然としてエッジ使用して改善することができる。したがって、負のサイクルが存在し、一部であることがわかります。1 a a
しかし、親テーブルをさかのぼって追跡することにより、別の負のサイクル陥り再び会うことはありません。a
この問題をどのように解決できますか?