Exemplo n.º 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))