public MinCostFlow SolveMinCostFlow() { // Instantiate a SimpleMinCostFlow solver. MinCostFlow minCostFlow = new MinCostFlow(); // Add each arc. for (int i = 0; i < numArcs; ++i) { int arc = minCostFlow.AddArcWithCapacityAndUnitCost(startNodes[i], endNodes[i], capacities[i], unitCosts[i]); if (arc != i) { throw new Exception("Internal error"); } } // Add node supplies. for (int i = 0; i < numNodes; ++i) { minCostFlow.SetNodeSupply(i, supplies[i]); } // Find the min cost flow. int solveStatus = (int)minCostFlow.SolveMaxFlowWithMinCost(); if (solveStatus == (int)MinCostFlow.Status.OPTIMAL) { //PrintNetworkFlowSolution(minCostFlow); return(minCostFlow); } else { Console.WriteLine("Solving the min cost flow problem failed. Solver status: " + solveStatus); return(null); } }