def dinic(net): flow = Network(net.n) residual = net.substract(flow) extended, layerNet = getLayerNet(residual) while extended: blocking = findBlockingFlow(layerNet) flow.appendFlow(blocking) residual = net.substract(flow) extended, layerNet = getLayerNet(residual) return flow