public void DFSGraphEdgeRecursiveTest() { var undirectedGraphWithCycles = new GraphAdjacentLists <int>(GraphAdjacentLists <int> .DirectedGraphEnum.Undirected); undirectedGraphWithCycles.AddVertex(1); undirectedGraphWithCycles.AddVertex(2); undirectedGraphWithCycles.AddVertex(3); undirectedGraphWithCycles.AddVertex(4); undirectedGraphWithCycles.AddVertex(5); undirectedGraphWithCycles.AddVertex(6); undirectedGraphWithCycles.AddEdge(1, 6); undirectedGraphWithCycles.AddEdge(1, 2); undirectedGraphWithCycles.AddEdge(2, 3); undirectedGraphWithCycles.AddEdge(3, 4); undirectedGraphWithCycles.AddEdge(4, 5); undirectedGraphWithCycles.AddEdge(5, 2); undirectedGraphWithCycles.AddEdge(5, 1); var directedGraphWithCycles = new GraphAdjacentLists <int>(GraphAdjacentLists <int> .DirectedGraphEnum.Directed); directedGraphWithCycles.AddVertex(1); directedGraphWithCycles.AddVertex(2); directedGraphWithCycles.AddVertex(3); directedGraphWithCycles.AddVertex(4); directedGraphWithCycles.AddVertex(5); directedGraphWithCycles.AddVertex(6); directedGraphWithCycles.AddEdge(1, 6); directedGraphWithCycles.AddEdge(1, 2); directedGraphWithCycles.AddEdge(2, 3); directedGraphWithCycles.AddEdge(3, 4); directedGraphWithCycles.AddEdge(4, 5); directedGraphWithCycles.AddEdge(5, 2); directedGraphWithCycles.AddEdge(5, 1); var undirectedGraphWithoutCycles = new GraphAdjacentLists <int>(GraphAdjacentLists <int> .DirectedGraphEnum.Undirected); undirectedGraphWithoutCycles.AddVertex(1); undirectedGraphWithoutCycles.AddVertex(2); undirectedGraphWithoutCycles.AddVertex(3); undirectedGraphWithoutCycles.AddVertex(4); undirectedGraphWithoutCycles.AddVertex(5); undirectedGraphWithoutCycles.AddVertex(6); undirectedGraphWithoutCycles.AddEdge(1, 6); undirectedGraphWithoutCycles.AddEdge(1, 2); undirectedGraphWithoutCycles.AddEdge(2, 3); undirectedGraphWithoutCycles.AddEdge(3, 4); undirectedGraphWithoutCycles.AddEdge(4, 5); Assert.Equal(new [] { "tree edge: 1-6", "tree edge: 1-2", "tree edge: 2-3", "tree edge: 3-4", "tree edge: 4-5", "back edge: 5-2", "back edge: 5-1" }, DFS.DFSGraphEdgesRecursive(undirectedGraphWithCycles, 1)); Assert.True(DFS.DFSGraphHasCycles(undirectedGraphWithCycles)); Assert.Equal(new [] { "tree edge: 1-6", "tree edge: 1-2", "tree edge: 2-3", "tree edge: 3-4", "tree edge: 4-5", "back edge: 5-2", "back edge: 5-1" }, DFS.DFSGraphEdgesRecursive(directedGraphWithCycles, 1)); Assert.True(DFS.DFSGraphHasCycles(directedGraphWithCycles)); Assert.Equal(new [] { "tree edge: 1-6", "tree edge: 1-2", "tree edge: 2-3", "tree edge: 3-4", "tree edge: 4-5" }, DFS.DFSGraphEdgesRecursive(undirectedGraphWithoutCycles, 1)); Assert.False(DFS.DFSGraphHasCycles(undirectedGraphWithoutCycles)); }