Exemplo n.º 1
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);
        }
        public void FindingSinglePathShouldReturnCorrectPath()
        {
            var correctExtensionPath = new Queue <Tuple <int, int> >(new List <Tuple <int, int> >
            {
                new Tuple <int, int>(2, 5),
                new Tuple <int, int>(5, 1),
                new Tuple <int, int>(1, 6)
            });

            var initialMatchedGraph = GetInitialMatchedGraph(new Graph(_dirPathSample + "v1Graph.json"));
            var directedGraph       = GetDirectedGraph(initialMatchedGraph);

            var       extensionPathBuilder = new ExtensionPathBuilder(directedGraph);
            const int startVertice         = 2;
            var       extensionPath        = extensionPathBuilder.FindExtensionPath(startVertice);

            foreach (var connection in extensionPath)
            {
                _output.WriteLine("({0},{1})", connection.Item1, connection.Item2);
            }
            extensionPath.Should().BeEquivalentTo(correctExtensionPath);
        }