29 int[] startNodes = {0, 0, 1, 1, 1, 2, 2, 3, 4};
30 int[] endNodes = {1, 2, 2, 3, 4, 3, 4, 4, 2};
31 int[] capacities = {15, 8, 20, 4, 10, 15, 4, 20, 5};
32 int[] unitCosts = {4, 4, 2, 2, 6, 1, 3, 2, 3};
35 int[] supplies = {20, 0, 0, -5, -15};
40 MinCostFlow minCostFlow =
new MinCostFlow();
43 for (
int i = 0; i < startNodes.Length; ++i)
45 int arc = minCostFlow.AddArcWithCapacityAndUnitCost(startNodes[i], endNodes[i],
46 capacities[i], unitCosts[i]);
47 if (arc != i)
throw new Exception(
"Internal error");
51 for (
int i = 0; i < supplies.Length; ++i)
53 minCostFlow.SetNodeSupply(i, supplies[i]);
60 MinCostFlow.Status solveStatus = minCostFlow.Solve();
64 if (solveStatus == MinCostFlow.Status.OPTIMAL)
66 Console.WriteLine(
"Minimum cost: " + minCostFlow.OptimalCost());
67 Console.WriteLine(
"");
68 Console.WriteLine(
" Edge Flow / Capacity Cost");
69 for (
int i = 0; i < minCostFlow.NumArcs(); ++i)
71 long cost = minCostFlow.Flow(i) * minCostFlow.UnitCost(i);
72 Console.WriteLine(minCostFlow.Tail(i) +
" -> " +
73 minCostFlow.Head(i) +
" " +
74 string.Format(
"{0,3}", minCostFlow.Flow(i)) +
" / " +
75 string.Format (
"{0,3}", minCostFlow.Capacity(i)) +
" " +
76 string.Format (
"{0,3}", cost));
81 Console.WriteLine(
"Solving the min cost flow problem failed. Solver status: " +