Beispiel #1
0
        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);
            }
        }