コード例 #1
0
        public IWeighedPairsGraph Applay(ITwoPartsWeighedGraph graph)
        {
            var pairs      = _factory.CreateWeighedPairsGraph(graph.NodeXs, graph.NodeYs);
            var hard       = _factory.CreateTwoPartsWeighedGraph(graph.NodeXs, graph.NodeYs);
            var potentials = CreatePotential(graph.Nodes);
            int stepIndex  = 0;

            while (pairs.GetFree().FirstOrDefault() is { } node)
            {
                _onStep($"Шаг {stepIndex}");
                _onStep($"\tТекущая свободная вершина {node}");
                _onStep($"\tТекущие рёбра в графе H: {hard}");
                _onStep($"\tТекущие паросочетания: {pairs}");
                if (!TryIncreasePairs(pairs, node, hard, out IPairNode[] chainsNodeXs, out IPairNode[] chainsNodeYs))
コード例 #2
0
        public static IWeighedPairsGraph ApplayHungarian(this ITwoPartsWeighedGraph graph, IGraphAtoFactory factory, Action <string> onStep)
        {
            var hungarian = new Hungarian(factory, onStep);

            return(hungarian.Applay(graph));
        }