Cormen の「Introduction to algorithms 2nd Edition」から Ford-Fulkerson アルゴリズムを勉強しています。これは、有向グラフ G=(V, E) の擬似コードで次のように記述されます。ここで、f は VxV で定義されたフローです。
FORD-FULKERSON(G, s, t)
for each edge (u,v) in E(G)
do f[u, v] = 0
f[v, u] = 0
while there is a path p from s to t in the residual network Gf
do m = min{c(u, v)-f[u, v]: (u, v) is on p}
for each edge (u, v) on p
do f[u, v] = f[u, v] + m
f[v, u] = - f[u, v]
残差グラフ Gf は G と同じ頂点を持ち、c(u, v) - f(u, v) > 0 である順序付けられた頂点のペア (u, v) をエッジとして持ちます (編集: c は容量関数です)。開始時に与えられ、グラフの一部ではないエッジでゼロになるように拡張されます)
「両方向」にエッジが存在する場合、たとえばエッジとその逆がグラフにある場合にアルゴリズムで何が起こるかはわかりません。最小値の c(u, v) は、グラフの元の容量に対するものであると想定しています。(a, b) と (b, a) の両方がエッジである場合、残差グラフの 4 つのエッジを処理する必要がありますか? 現時点では、平行エッジを直接処理することはできません。
SO に関する次の質問を見つけました: 最大フロー - フォード ファルカーソン: 無向グラフ しかし、結果がどうなるかはわかりません。