public void InitialMatchingShouldReturnCorrectGraph()
        {
            var correctInitialMatchedGraph = new Graph(_dirPathCorrect + "v1GraphInitialMatched.json");
            var initialMatchingBuilder     = new InitialMatchingBuilder(new Graph(_dirPathSample + "v1Graph.json"));

            var initialMatchedGraph = initialMatchingBuilder.FindInitialMatching();

            _output.WriteLine(initialMatchedGraph.ToString());
            initialMatchedGraph.AdjacencyMatrix.Should().BeEquivalentTo(correctInitialMatchedGraph.AdjacencyMatrix);
        }
Ejemplo n.º 2
0
        public Graph FindMaximalMatchedGraph()
        {
            var initialMatchingBuilder = new InitialMatchingBuilder(_graph);
            var initialMatchedGraph    = initialMatchingBuilder.FindInitialMatching();

            var graph = initialMatchedGraph;
            List <Tuple <int, int> > path;

            do
            {
                path          = new List <Tuple <int, int> >();
                _freeVertices = new List <int>(graph.FreeVertices);
                var directedGraphBuilder = new DirectedGraphBuilder(graph);
                var directedGraph        = directedGraphBuilder.CreateDirectedGraph();

                var extensionPathBuilder = new ExtensionPathBuilder(directedGraph);

                foreach (var freeVertice in _freeVertices)
                {
                    var extensionPath = extensionPathBuilder.FindExtensionPath(freeVertice);
                    if (_freeVertices.Any() && extensionPath.Any())
                    {
                        if (_freeVertices.Contains(extensionPath.Last().Item2))
                        {
                            path = extensionPath.ToList();
                            break;
                        }
                    }
                }

                if (path.Any())
                {
                    var matchingBuilder = new MatchingBuilder(_graph, path, graph.MatchedVertices);
                    graph = matchingBuilder.BuildNewMatching();
                }
            } while (path.Any());


            return(graph);
        }
        private Graph GetInitialMatchedGraph(Graph basicGraph)
        {
            var initialMatchingBuilder = new InitialMatchingBuilder(basicGraph);

            return(initialMatchingBuilder.FindInitialMatching());
        }