public void DFS_Graph_WithCrossEdges()
            {
                var graph = new Graph <string, string>();

                graph.AddEdges(new List <VertexLink <string, string> >
                {
                    new VertexLink <string, string>("A", "B"),
                    new VertexLink <string, string>("A", "C"),
                    new VertexLink <string, string>("A", "D"),
                    new VertexLink <string, string>("B", "E"),
                    new VertexLink <string, string>("B", "C"),
                    new VertexLink <string, string>("D", "C"),
                    new VertexLink <string, string>("C", "F"),
                    new VertexLink <string, string>("E", "F"),
                });

                var dfsTraverser      = new DepthFirstTraverser <string, string>();
                var traversedVertices = dfsTraverser.Traverse(graph, "A").ToList();

                Assert.AreEqual(6, traversedVertices.Count, "Traversed vertices does not match");
                Assert.AreEqual("A", traversedVertices[0], "A does not match");
                Assert.AreEqual("B", traversedVertices[1], "B does not match");
                Assert.AreEqual("E", traversedVertices[2], "E does not match");
                Assert.AreEqual("F", traversedVertices[3], "F does not match");
                Assert.AreEqual("C", traversedVertices[4], "C does not match");
                Assert.AreEqual("D", traversedVertices[5], "D does not match");
            }
            public void DFS_TreeGraph()
            {
                var graph = new Graph <string, string>();

                graph.AddEdges(new List <VertexLink <string, string> >
                {
                    new VertexLink <string, string>("A", "B"),
                    new VertexLink <string, string>("A", "C"),
                    new VertexLink <string, string>("A", "D"),
                    new VertexLink <string, string>("B", "E"),
                    new VertexLink <string, string>("B", "F"),
                    new VertexLink <string, string>("C", "G"),
                    new VertexLink <string, string>("C", "H"),
                    new VertexLink <string, string>("D", "I"),
                    new VertexLink <string, string>("F", "J"),
                    new VertexLink <string, string>("G", "K"),
                    new VertexLink <string, string>("K", "L"),
                });

                var dfsTraverser      = new DepthFirstTraverser <string, string>();
                var traversedVertices = dfsTraverser.Traverse(graph, "A").ToList();

                Assert.AreEqual(12, traversedVertices.Count, "Traversed vertices does not match");
                Assert.AreEqual("A", traversedVertices[0], "A does not match");
                Assert.AreEqual("B", traversedVertices[1], "B does not match");
                Assert.AreEqual("E", traversedVertices[2], "E does not match");
                Assert.AreEqual("F", traversedVertices[3], "F does not match");
                Assert.AreEqual("J", traversedVertices[4], "J does not match");
                Assert.AreEqual("C", traversedVertices[5], "C does not match");
                Assert.AreEqual("G", traversedVertices[6], "G does not match");
                Assert.AreEqual("K", traversedVertices[7], "K does not match");
                Assert.AreEqual("L", traversedVertices[8], "L does not match");
                Assert.AreEqual("H", traversedVertices[9], "H does not match");
                Assert.AreEqual("D", traversedVertices[10], "D does not match");
                Assert.AreEqual("I", traversedVertices[11], "I does not match");
            }