// Push-relabel methods // Push() pushes flow forwards, or decreases incoming flow private void push(Vertex u, Vertex v) { // System.out.println("Pushing from " + u + " to " + v); int excess = u.getExcess(); int residualCapacity = getResidualCapacity(u, v); assert (excess > 0) : "Excess <= 0"; assert (residualCapacity > 0) : "Resid capacity <= 0"; assert (u.getHeight() == v.getHeight() + 1) : "Height of u != height of v + 1"; int changeInFlow = excess < residualCapacity ? excess : residualCapacity; if (flowsForward(u, v)) { addToFlow(u, v, changeInFlow); } else { addToFlow(v, u, -changeInFlow); } u.addToExcess(-changeInFlow); v.addToExcess(changeInFlow); }