Ejemplo n.º 1
0
        public static HashSet <Edge> GetBiggestMatching(this Bigraph graph)
        {
            var matching = new HashSet <Edge>();

            while (true)
            {
                var chain = graph.GetInterchangingChain(matching);
                if (chain == null)
                {
                    return(matching);
                }
                var chainSet = GetEdgesFromChain(chain);
                matching.SymmetricExceptWith(chainSet);
                graph.DarkNodes.Add(chain[0]);
                graph.DarkNodes.Add(chain[chain.Count - 1]);
            }
        }