Does there exist a flow graph that always requires flow to be pushed back no matter what ordering of augmenting paths is chosen in Ford Fulkerson?

Let's assume we use the standard procedure of repeating this step:

  1. Find an augmenting path $p$ in residual graph $G_R$ of $G$.
  2. Let $c$ be the minimum capacity edge in $p$.
  3. Increase the flow on every edge in $p$ by $c$.
  4. Update $G_R$.

The key here is step 1, where select augmenting paths. For many graphs, if we had an oracle to tell us which augmenting paths to use, we would never need to push flow back. I'm am curious if there is a case for which, regardless of augmenting paths and their orders, we will always be required to "push flow back". To clarify what I mean:

To push flow back in $G$, means to increase the flow on an edge $(u,v)$ in $G_R$ such that edge $(v,u)$ exists in $G$.

If this is not possible, I would also be interested in a proof that such ordering of augmenting paths always exists? If it is possible, does it generalize to any number of nodes $n$? This question is alluded at in the ending sentences of this answer, but provides no proof.

My initial thoughts were that this would be a trivial proof. However, there are many times when the optimal flow along an augmenting path may not be equivalent to its minimum capacity edge. Since (by step 3) we require paths to be filled to their minimum capacity, we cannot easily meet this. My next thought would be that there should exist at least one augmenting path such that its max flow is equivalent to its minimum capacity edge. This is obvious by the Max flow min cut Theorem, but I am not sure how this would apply to the proof. With this, we may be able to get an inductive proof that it is always possible, but I am really unsure of this strategy as well.

  • 2
    $\begingroup$ A nice example from ryan that shows not every max flow can be decomposed in this way: i.sstatic.net/d4ObI.png (though in this case there is another max flow that can be decomposed). $\endgroup$
    – D.W.
    Commented Apr 26, 2019 at 23:22
  • $\begingroup$ My strategy would be to ask whether there always exists a maximum flow that can be represented as a sum of path flows, with the additional condition that each path must make some edge tight in the flow graph that still remains after all preceding paths have been applied. Induction on the edge count of the input graph could be useful here, since every such path must then remove at least one edge from the flow graph. $\endgroup$ Commented Apr 27, 2019 at 15:49
  • $\begingroup$ @xskxzr: Whoops, my mistake. $P_1 \ne P_2$ is also required I believe. It seems correct to me, but do you have a proof sketch? I can see how a specific pair of paths in a bad flow can be fixed, but my concern is that fixing these paths might disrupt previously-fixed paths. $\endgroup$ Commented Apr 27, 2019 at 20:02
  • $\begingroup$ @j_random_hacker My previous guess seems wrong. Now I have a new guess. Call a flow extreme if there does not exist two positive cycles $v_1v_2\ldots v_nv_1$ and $v_1v_n\ldots v_2v_1$ at the same time in the residual network. There always exists an extreme max flow. My guess: If a max flow is extreme, it can be decomposed. $\endgroup$
    – xskxzr
    Commented Apr 28, 2019 at 12:34
  • $\begingroup$ @xskxzr: That again sounds plausible, but do you have a proof in mind? How can we be sure that fixing one cycle does not unfix another? Induction on cycle size perhaps? $\endgroup$ Commented Apr 28, 2019 at 13:04

4 Answers 4


There is a network that forces Ford-Fulkerson to push flow back.


Consider executing Ford-Fulkerson (FF) on any flow network where all edges capacities are at least 2. No matter how FF chooses the path in the first iteration, it will send at least 2 units of flow along the path. If it never pushes flow back in subsequent iterations, then the final flow will have an $s$-$t$ path with flow 2 or more on every edge.

It follows that, if FF can always execute without pushing back flow, then every flow network with minimum capacity 2 has a max flow that sends at least 2 units of flow along some $s$-$t$ path.

On the other hand, it's not hard, using just edges of capacities 2 and 3, to force some edges to carry exactly 1 unit of flow in any max flow (in order to fill a 1-unit gap in some capacity-3 edge that is fed, or drained, by a capacity-2 edge). We use this idea to create a flow network where the edges that are forced to carry 1 unit of flow form an $s$-$t$ cut, so that no max flow can send 2 units of flow along any $s$-$t$ path.

The network

  • Each edge $e$ is labeled with $f^*_e/c_e$ where $f_e^*$ is a flow value and $c_e$ is the edge capacity.

  • Each edge capacity is in $\{2,3,\infty\}$.

  • The flow $f^*$ saturates every finite-capacity edge and sends 1 unit on every other edge.


Lemma 1. The flow $f^*$ shown is the unique max flow.

Assuming Lemma 1 for a moment, let's verify the example:

Lemma 2. Every execution of Ford-Fulkerson on this network pushes some flow back.

Proof of Lemma 2.

  1. Every capacity is at least 2, so the first iteration of Ford-Fulkerson must send at least 2 units of flow along some $s$-$t$ path $p$.
  2. But every such path crosses an edge that has just 1 unit of flow in $f^*$ (such edges form an $s$-$t$ cut).
  3. So, to arrive at $f^*$, Ford-Fulkerson must at some point cancel flow on an edge in $p$. $~~~\Box$

Proof of Lemma 1.

  1. Consider any max flow $f$.

  2. Every finite-capacity edge is on a min-capacity cut (of capacity 7), so $f$ saturates every finite-capacity edge.

  3. Consider the edge $e=(A, C)$. It forms a cut with three capacity-2 edges: $(S, C)$, $(D, H)$, and $(B, F)$. No edges cross backwards across this cut, and seven units of flow must cross the cut. So $(A, C)$ must have 1 unit of flow across it.

  4. Similar reasoning holds for every other infinite-capacity edge. Here is a table showing, for each infinite-capacity edge, the other edges in the cut that force it to have 1 unit of flow. Each column shows such an edge, with the cut that forces it below:

$(A, C)$ $(A, D)$ $(B, D)$ $(E, G)$ $(F, G)$ $(F, H)$ $(I, K)$ $(I, L)$ $(J, L)$
$(S, C), (D, H), (B, F)$ $(C, E), (S, B)$ $(S, C), (S, A), (B, F)$ $(E, I), (D, H), (B, F)$ $(C, E), (H, J)$ $(E, I), (G, K), (D, H)$ $(G, K), (L, T), (J, T)$ $(K, T), (H, J)$ $(E, I), (G, K), (J, T)$


  • 2
    $\begingroup$ Wow! Brilliant! Kudos on solving this, at long last! $\endgroup$
    – D.W.
    Commented Apr 6 at 22:10

I think it is possible to reason backwards from an optimal solution$^1$ to the order in which the paths have to be augmented to not have any pushing-back:

In the solution, for any path from the source to the sink, where the flow is larger than zero, there is at least one edge, that constrains that flow, i.e: its flow is at capacity. If it were not, there would have been an augmenting path along that path, i.e. the solution would not be optimal. Also, of the edges that are at capacity, there has to be one (or multiple) with the lowest possible capacity. Furthermore, this edge has to be part of some path between source and sink where each edge has a flow at least as high. We take such a path, call it $P_1$ and remove its 'flow capacity' from the initial graph (i.e. reduce the capacity of the edges along the path). We repeat this with the remaining graph (resulting in $P_2, P_3, \ldots, P_n$) until there is no path between source and sink remaining, where all edges have a non-zero capacity.

Then, $P_1, P_2, \ldots, P_n$ is the order in which the paths have to be chosen s.t. there is never any pushing back necessary.

$1$: This only holds for optimal solutions that have been found with the FF algorithm. E.g. in a graph where 5 edges with capacity 2 go into node X and only one edge leaves it with capacity 5, there would be a max flow where each of the 5 edges has a flow of 1/2 and the outgoing has a flow of 5/5. Then the 5/5 edge would be the lowest edge at capacity but there is no path from source to sink in that graph where each edge has a flow of 5 or more. This is no problem for the algorithm outlined above because such a max-flow solution would not be found with FF.

  • 1
    $\begingroup$ Thinking about this some more, I think you need to show more explicitly that, after removing $P_1$'s flow from the capacity of the graph, we are left with a smaller instance of the same situation as we started with, namely an optimal solution to a flow problem. This isn't too hard, I think: The new graph is at least 1 edge smaller, since at least 1 edge in $P_1$ was tight; and the new flow is feasible, since the original one was and every internal vertex in $P_1$ is incident on 2 edges of $P_1$ that add and subtract the same amount of flow, leaving the excess at that vertex at 0. ... $\endgroup$ Commented Oct 26, 2019 at 11:38
  • 3
    $\begingroup$ So how to prove such a max-flow solution would not be found with FF? Or more formally, how to prove that in a FF solution, there exists an edge that is at capacity being part of some path between source and sink where each edge has a flow at least as high? $\endgroup$
    – xskxzr
    Commented Oct 27, 2019 at 5:23
  • 2
    $\begingroup$ 1. Where does your proof use the assumption that the solution has been found with FF? You say it only works for such solutions, but then I can't find any sentence in your proof that uses this assumption. 2. You claim that "this edge has to be part of some path between source and sink where each edge has a flow at least as high", but I think this needs a proof. Is it true? Here's a max flow (not found by FF) where it is false: i.sstatic.net/d4ObI.png. So you'll need to use the assumption that the solution was found by FF somewhere; but what exactly is the reasoning? (cont.) $\endgroup$
    – D.W.
    Commented Oct 30, 2019 at 17:04
  • 2
    $\begingroup$ @j_random_hacker, I don't think it's enough to show that the new graph is an optimal solution to a flow problem; we also need to show that it's a solution that could have been found by FF. Some optimal solutions can't be found by FF, and the proof doesn't work for those (e.g., i.sstatic.net/d4ObI.png). It seems like there are some gaps in this proof attempt that I'm not sure how to fill in. $\endgroup$
    – D.W.
    Commented Oct 30, 2019 at 17:08
  • 1
    $\begingroup$ See my non-answer for an example that shows that your current approach (assuming nothing about $f$ other than it is a max flow that FF can reach) cannot work. $\endgroup$
    – Neal Young
    Commented Apr 2 at 14:05


Here are some observations towards a collaborative solution. This is not a full answer.


Narek's proof sketch purports to show that every maximum flow can be reached by Ford-Fulkerson (FF). The counter-example linked to by D.W. shows that this is not the case. Oerpli's approach attempts to show that every flow $f^*$ that can be reached by FF can be reached without pushing back flow, but this turns out to be false too:

Lemma 1. There is a max flow $f^*$ such that FF can produce $f^*$, but no execution of FF can produce $f^*$ without pushing back flow.

Motivated by these difficulties, Lemma 2 below gives two equivalent characterizations of OP's question that may be somewhat easier to work with. Each characterization gives a necessary and sufficient condition for the first path $p$ chosen by FF to have, in any execution that never pushes flow back. (Conversely, if every iteration chooses such a path $p$ in the current residual graph with back edges deleted, the execution never pushes flow back.)

For any path $p$, let $\delta(p) = \min_{e\in p} \textsf{capacity}(e)$ be $p$'s minimum edge capacity.

Lemma 2. The following statements are equivalent (either none holds or they all hold):

  1. Every flow network admits an execution of FF that never pushes flow back. (This is the statement that OP asks about.)
  2. Every $s$-$t$ flow network has a max flow $f^*$ and $s$-$t$ path $p$ such that $\min_{e\in p} f^*(e) = \delta(p)$.
  3. Every $s$-$t$ flow network has an $s$-$t$ path $p$ such that reducing the capacity of every edge on $p$ by $\delta(p)$ decreases the max flow value by $\delta(p)$.

Oerpli's approach conjectures that Statement 2 above holds (for some path $p$) for any flow $f^*$ that is reachable by FF, but Lemma 1 disproves that conjecture.


FWIW, we conjecture that a max-flow $f^*$ that satisfies Statement 2 (for some path $p$) can always be found as follows. Consider the following standard flow-decomposition-based LP for max flow as a packing problem. Let $E$ be the set of edges. Let $P$ be the set of $s$-$t$ paths. Let $P_e$ be the set of $s$-$t$ paths that contain edge $e$. $$ \begin{align} \textsf{maximize } & \sum_{p\in P} f_p \\ \sum_{p\in P_e} f_p & {} \le \textsf{capacity}(e) && (e \in E) \\ f_p & {} \ge 0 && (p\in P) \end{align} $$ Now take $f^*$ to be any optimal basic feasible solution to this LP.

Let $P_{f^*}=\{p \in P : f^*(p)\ne 0\}$ be the support of $f^*$. There are $|P_{f^*}|$ tight edge-capacity constraints that uniquely determine $f^*$ among flows with support in $P_{f^*}$. It follows that the number of edges saturated by $f^*$ is at least $|P_{f^*}|$. Although the latter property alone is not enough, it does rule out the examples linked to by D.W. and in Lemma 1.

Proof of Lemma 1

$~~~~~~~~~~~~~~~~~~~~~~~~~~~$ enter image description here

Each edge in the above flow network is labeled with its capacity. FF can first choose the path $(S, A, B, C, T)$, then the path $(S, B, A, C, T)$. It will augment the flow by 1 unit on each path. The second augmentation cancels the flow on edge $(A, B)$. The resulting maximum flow $f^*$ sends one unit along the path $(S, A, C, T)$, and one unit along $(S, B, C, T)$.

This $f^*$ cannot be reached by FF without pushing back flow on $(A, B)$. Indeed, any execution of FF that does not push flow on $(A, B)$ must choose its first path among the remaining edges, all of which have capacity 2, so will terminate after one iteration with flow of 2 units, along just one of the two paths $(S, A, C, T)$ or $(S, B, C, T)$. $~~~\Box$

Proof of Lemma 2

Statement 1 implies Statement 2, because in any execution that never pushes flow back, the path $p$ chosen in the first iteration has $\delta(p)$ units sent along its edges, and then in subsequent iterations flow is never cancelled on an edge, so $\min_{e\in p} f^*(e) \ge \delta(p)$. And by definition $\min_{e\in p} f^*(e) \le \delta(p)$.

Statement 2 implies Statement 3 because, after reducing the capacity of every edge on $p$ as described in Statement 2 with respect to some max flow $f^*$, in the resulting graph the flow $f'$ obtained from $f^*$ be reducing the flow on each edge $e\in p$ by $\delta(p)$ is feasible, and has value $|f^*| - \delta(p)$. (And no flow $g$ in the resulting graph can have a larger value, otherwise adding $\delta(p)$ units along $p$ to $g$ would give a flow in the original graph with value larger than $f^*$.)

Statement 3 implies Statement 1 as follows. As FF executes, let $f$ denote its current flow. Let $G_f$ denote the residual graph. Let $G'_f$ denote the graph obtained from $G_f$ by deleting all back edges and zero-capacity edges.

In each iteration of FF, provided that $G'_f$ has an $s$-$t$ path, make FF choose its augmenting path to be the path promised to exist in $G'_f$ by Statement 3 (applied to $G'_f$). This $p$ also exists in the residual graph $G_f$, so is a valid choice for FF.

Let $F(G)$ denote the max-flow value in a given flow network $G$. Note $G'_f$ is a subgraph of $G_f$, so $F(G'_f) \le F(G_f)$. We will show that this execution of FF maintains the invariant $$F(G'_f) = F(G_f).$$ The invariant holds trivially at the start, when $f$ is the all-zero flow. Consider any iteration that starts with the invariant true. Let $f$ and $f'$ be the flows at the start and end of the iteration, respectively. Flow $f'$ is obtained from $f$ by pushing $\delta$ units of flow along the chosen path $p$, where $\delta$ is $p$'s minimum edge capacity in $G_f$.

Because FF's termination condition is not met, $F(G_f) > 0$. So by the invariant $F(G'_f) > 0$. So $G'_f$ has an $s$-$t$ path, and $p$ is indeed chosen by applying Statement 3 to $G'_f$. So $p$ is in $G'_f$ and has minimum edge capacity $\delta$ in $G'_f$. The difference between $G'_f$ and $G'_{f'}$ is just that in $G'_{f'}$ each edge on $p$ has its edge capacity reduced by $\delta$. Now $$\begin{align} F(G'_{f'}) & {} = F(G'_f) - \delta && (\textsf{by the property of } p \textsf{ from Statement 3}) \\ & {} = F(G_{f}) - \delta && (\textsf{by the invariant } F(G'_f) = F(G_f)) \\ & {} = F(G_{f'}) && (\textsf{by the standard proof of correctness for FF}) \end{align} $$ So the invariant is maintained. As observed in the proof above, it follows that in each iteration the path is chosen from $G'_f$. Thus, this execution of FF never pushes flow back. $~~~~\Box$


It is not hard to show that every graph admits such a sequence of augmenting paths where no push-backs are needed. However, this is not the case if the augmenting paths we are looking for are necessarily shortest augmenting paths. I will sketch the idea behind the former, keeping it as an exercise for you to find an example of the later.

Let $G$ be a given graph. Let $c: E \mapsto \mathbb{Z}$ be the given function of capacities and let $f_M : E \mapsto \mathbb{Z}$ be a maximum flow in $G$ (We only need its existence and do not care how to compute it). Let us apply the method of Ford and Fulkerson on the graph $G$ where we assign the function $f_M$ as the capacities of the edges. Let $P_1, \dots P_r$ be the augmenting paths in the graph in order. We claim that these paths never introduce a push-back and that for the graph $G$ with capacities function $c$, the paths $P_i$ are augmenting path in $G$ after augmenting $P_1$ to $P_{i-1}$.

The first claim can be proven by induction over $i$, showing that for $f_i$ the flow function after $i$ steps, that $f_i < f_M$ and hence is part of the final answer and using this fact to prove the claim.

The second claim comes from the fact that each augmenting path in $G$ where the capacities are $f_M$ admits a critical edge that is also critical when the capacities are defined by the function $c$.

Note that these proofs are not formal, I only sketched the idea and I keep the task of formulizing a complete proof as an excersize for you :)

  • 1
    $\begingroup$ For the first claim, I don't see how it's enough to show that $f_i < f_M$ for each $f_i$ -- IIUC, this would still permit downward fluctuations in the flow across a given edge as $i$ advances. $\endgroup$ Commented Oct 23, 2019 at 6:27
  • $\begingroup$ This approach seems to require (indeed, purports to show) that any maximum flow $f$ can be reached by FF without pushing back flow. Indeed, it remarks about $f$ that "We only need its existence and do not care how to compute it." But as the example linked to by D.W. in the comments demonstrates, there are maximum flows that cannot be reached by FF (with or without pushing back flow). The claim "each augmenting path in $G$ where the capacities are $f_M$ admits a critical edge that is also critical when the capacities are defined by the function $c$" seems to fail for D.W.'s example. $\endgroup$
    – Neal Young
    Commented Apr 2 at 14:32

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.