Ford-Fulkerson
アルゴリズムとしては単純で、グラフ$ G(V, E)において始点$ sから終点$ tまでの経路を探索して、フローを増やす余地がある経路を1つ見つける(このようなフローを増やす余地がある頂点と辺だけで構成されたグラフを残余ネットワーク$ G_f(V, E_f)と呼ぶ)。見つけたら、増やせるだけフローを増やす、という操作をそのような経路が見つからなくなるまで繰り返す。なお、注意点としては、有向グラフであったとしても経路探索時は辺の向きを無視して探索を行い、辺を逆向きにたどる場合はそこに流れているフローを押し返すと考える。この場合は容量ではなくそこに流れているフローの絶対値が新たに増やせるフローの値となる。すなわち、$ f(u, v) \lt 0のときは$ | f(u, v)|がその辺上で増やせるフローの量であると見做す。 手順は以下のようになる
1. すべての辺について$ f(u, v) = 0とする
2. $ G_f(V, E_f)について始点$ sから終点$ tまでの経路$ pがあり、経路上のすべての辺$ (u, v)について$ c_f(u, v) \gt 0であるときに以下を行う(そのような経路を増加道(augmenting path)と呼ぶ)
1. $ c_f(p) = \min\{c_f(u, v) | (u, v) \in p\}を求める
2. $ (u, v) \in pであるような辺$ (u, v)について、$ c_f(u, v) = f(u, v) + c_f(p)および$ c_f(v, u) = f(v, u) - c_f(p)のようにフロー$ fを更新する
3. ステップ2を繰り返し行い、増加道が見つからなくなったらやめる
ステップ2の増加道の探索は幅優先探索でも深さ優先探索でもよい。
このアルゴリズムの最悪時計算量は$ O(|E|f)となる。ただし$ |E|はグラフ$ Gの辺の総数、$ fは得られた最大フローの値。これは上記のステップ2でフローが少なくとも$ 1は増えるので最悪時は$ 1ずつしか増えないため。