Ford Fulkerson アルゴリズムを Java で実装しようとしています。これまでのところ、ノードとエッジを含むグラフがあります。ノードには、ID 文字列とエッジの adjacencyList が含まれています。エッジには、容量とそれが導くノードが含まれます。
ウィキペディアのページにある疑似コードとその実装方法を理解しようとしています (私は Java を使用しています)。これは私がこれまでに理解していることです:
最初に、グラフ内のすべてのエッジの流れをゼロに設定します。
2 番目のステップは、エッジが残余容量を持つネットワークである残差グラフを作成することです: 容量 - フロー (「通常のグラフ」の対応するエッジの)。次に、この残差グラフを使用してソースからシンクへのパスを見つけ、このパスに沿って最小容量を見つけます。(これは本当にトリッキーになるところです。残差グラフ用にまったく新しいグラフを作成する必要がありますか、それとも元のグラフで何らかの方法で表現する必要がありますか?最善の方法は何ですか?)
ステップ 2 はパスが見つからなくなるまで繰り返されますが、パスが見つかるたびにステップ 3 と 4 を実行します。
パスに沿ったエッジごとに、ステップ 2 で見つけた最小値を追加します。
パスの反対方向のエッジごとに、ステップ 2 で見つけた最小値を引きます。
ステップ 3 と 4 は私を困惑させます。なぜなら、一方の方向に加算することと、反対方向に減算することは同じことだと思うからです。これらの加算と減算は、残差グラフではなく、グラフで行われますか?
助けていただければ幸いです。数時間この問題に頭を悩ませようとしていますが、理解できないようです。