public void BiDirectional_AdjancencyListGraph_Smoke_Test() { var graph = new Advanced.Algorithms.DataStructures.Graph.AdjacencyList.DiGraph <char>(); graph.AddVertex('A'); graph.AddVertex('B'); graph.AddVertex('C'); graph.AddVertex('D'); graph.AddVertex('E'); graph.AddVertex('F'); graph.AddVertex('G'); graph.AddVertex('H'); graph.AddVertex('I'); graph.AddEdge('A', 'B'); graph.AddEdge('B', 'C'); graph.AddEdge('C', 'D'); graph.AddEdge('D', 'E'); graph.AddEdge('E', 'F'); graph.AddEdge('F', 'G'); graph.AddEdge('G', 'H'); graph.AddEdge('H', 'I'); var algorithm = new BiDirectional <char>(); Assert.IsTrue(algorithm.PathExists(graph, 'A', 'I')); graph.RemoveEdge('D', 'E'); graph.AddEdge('E', 'D'); Assert.IsFalse(algorithm.PathExists(graph, 'A', 'I')); }
public void KosarajuStronglyConnected_AdjacenctListGraph_Smoke_Test() { var graph = new Advanced.Algorithms.DataStructures.Graph.AdjacencyList.DiGraph <char>(); graph.AddVertex('A'); graph.AddVertex('B'); graph.AddVertex('C'); graph.AddVertex('D'); graph.AddVertex('E'); graph.AddVertex('F'); graph.AddVertex('G'); graph.AddVertex('H'); graph.AddEdge('A', 'B'); graph.AddEdge('B', 'C'); graph.AddEdge('C', 'A'); graph.AddEdge('C', 'D'); graph.AddEdge('D', 'E'); graph.AddEdge('E', 'F'); graph.AddEdge('F', 'G'); graph.AddEdge('G', 'E'); graph.AddEdge('F', 'H'); var algorithm = new KosarajuStronglyConnected <char>(); var result = algorithm.FindStronglyConnectedComponents(graph); Assert.AreEqual(4, result.Count); var expectedResult = new List <List <char> >() { new char[] { 'A', 'B', 'C' }.ToList(), new char[] { 'D' }.ToList(), new char[] { 'E', 'F', 'G' }.ToList(), new char[] { 'H' }.ToList() }; for (int i = 0; i < expectedResult.Count; i++) { var expectation = expectedResult[i]; var actual = result[i]; Assert.IsTrue(expectation.Count == actual.Count); foreach (var vertex in expectation) { Assert.IsTrue(actual.Contains(vertex)); } } }
public void DFS_Topological_Sort_AdjancencyListGraph_Smoke_Test() { var graph = new Advanced.Algorithms.DataStructures.Graph.AdjacencyList.DiGraph <char>(); graph.AddVertex('A'); graph.AddVertex('B'); graph.AddVertex('C'); graph.AddVertex('D'); graph.AddVertex('E'); graph.AddVertex('F'); graph.AddVertex('G'); graph.AddVertex('H'); graph.AddEdge('A', 'B'); graph.AddEdge('B', 'C'); graph.AddEdge('C', 'D'); graph.AddEdge('E', 'D'); graph.AddEdge('E', 'F'); graph.AddEdge('F', 'G'); graph.AddEdge('F', 'H'); var algorithm = new DepthFirstTopSort <char>(); var result = algorithm.GetTopSort(graph); Assert.AreEqual(result.Count, 8); }
public void Graph_Cycle_Detection_AdjancencyListGraph_Tests() { var graph = new Advanced.Algorithms.DataStructures.Graph.AdjacencyList.DiGraph <char>(); graph.AddVertex('A'); graph.AddVertex('B'); graph.AddVertex('C'); graph.AddVertex('D'); graph.AddVertex('E'); graph.AddVertex('F'); graph.AddVertex('G'); graph.AddVertex('H'); graph.AddEdge('A', 'B'); graph.AddEdge('B', 'C'); graph.AddEdge('C', 'A'); graph.AddEdge('C', 'D'); graph.AddEdge('D', 'E'); graph.AddEdge('E', 'F'); graph.AddEdge('F', 'G'); graph.AddEdge('G', 'E'); graph.AddEdge('F', 'H'); var algorithm = new CycleDetector <char>(); Assert.IsTrue(algorithm.HasCycle(graph)); graph.RemoveEdge('C', 'A'); graph.RemoveEdge('G', 'E'); Assert.IsFalse(algorithm.HasCycle(graph)); }