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))
public static IWeighedPairsGraph ApplayHungarian(this ITwoPartsWeighedGraph graph, IGraphAtoFactory factory, Action <string> onStep) { var hungarian = new Hungarian(factory, onStep); return(hungarian.Applay(graph)); }