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); }
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()); }