public void AssertCanSearch()
        {
            IGraph graph = new GraphAdjMatrix(new[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 });

            graph.AddEdge(0, 1);
            graph.AddEdge(1, 2);
            graph.AddEdge(2, 3);
            graph.AddEdge(3, 4);
            graph.AddEdge(4, 5);
            graph.AddEdge(5, 6);
            graph.AddEdge(5, 8);
            graph.AddEdge(6, 7);
            graph.AddEdge(7, 8);
            graph.AddEdge(8, 5);


            graph.AddEdge(0, 9);
            graph.AddEdge(9, 10);
            graph.AddEdge(10, 11);
            graph.AddEdge(11, 12);

            var dfs    = new DepthFirstSearch(graph);
            var result = dfs.CanFind(0, 12);

            Assert.IsTrue(result);

            var direction = dfs.PathToGoal();

            Assert.AreEqual(12, direction[4]);
            Assert.AreEqual(11, direction[3]);
            Assert.AreEqual(10, direction[2]);
            Assert.AreEqual(9, direction[1]);
            Assert.AreEqual(0, direction[0]);
        }
        public void AssertCanNotSearch()
        {
            IGraph graph = new GraphAdjMatrix(new[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 });

            graph.AddEdge(0, 1);
            graph.AddEdge(1, 2);
            graph.AddEdge(2, 3);
            graph.AddEdge(3, 4);
            graph.AddEdge(4, 5);
            graph.AddEdge(5, 6);
            graph.AddEdge(5, 8);
            graph.AddEdge(6, 7);
            graph.AddEdge(7, 8);
            graph.AddEdge(8, 5);


            graph.AddEdge(0, 9);
            graph.AddEdge(9, 10);
            graph.AddEdge(10, 11);


            var dfs    = new DepthFirstSearch(graph);
            var result = dfs.CanFind(0, 12);

            Assert.IsFalse(result);
        }