예제 #1
0
        public void TestBFS()
        {
            INode node1 = new Node("1");
            INode node2 = new Node("2");
            INode node3 = new Node("3");
            INode node4 = new Node("4");
            INode node5 = new Node("5");

            IGraph graph = new Graph(false);

            graph.AddNode(node1);
            graph.AddNode(node2);
            graph.AddNode(node3);
            graph.AddNode(node4);
            graph.AddNode(node5);

            graph.BuildEdge(node1, node2, 0);
            graph.BuildEdge(node1, node3, 0);
            graph.BuildEdge(node2, node4, 0);
            graph.BuildEdge(node2, node5, 0);

            BreadthFirstTraversal bfs             = new BreadthFirstTraversal(graph, node1);
            TraversalResult       traversalResult = bfs.Run();

            string result = string.Join(",", traversalResult.Nodes.Select(node => node.ID));

            Assert.Equal("1,2,3,4,5", result);
        }
예제 #2
0
        public void Mirror_WhenCalled_AlterThePositionsOfTheNodes()
        {
            Node <string> root  = new Node <string>("A");
            Node <string> nodeB = new Node <string>("B");
            Node <string> nodeC = new Node <string>("C");
            Node <string> nodeD = new Node <string>("D");
            Node <string> nodeE = new Node <string>("E");
            Node <string> nodeF = new Node <string>("F");
            Node <string> nodeG = new Node <string>("G");

            root.SetLeftChild(nodeB);
            root.SetRightChild(nodeC);

            nodeB.SetLeftChild(nodeD);
            nodeB.SetRightChild(nodeE);

            nodeC.SetLeftChild(nodeF);
            nodeC.SetRightChild(nodeG);

            BreadthFirstTraversal <string> breadthFirstTraversal = new BreadthFirstTraversal <string>();

            Assert.Equal("A,B,C,D,E,F,G", breadthFirstTraversal.Traverse(root));
            BinarySearchTreeProblemSolver.Mirror(root);
            Assert.Equal("A,C,B,G,F,E,D", breadthFirstTraversal.Traverse(root));
        }
예제 #3
0
        public void BreadthDepthShouldBeTwoWhenEndNodeIsFoundTest()
        {
            // Arrange
            var start = Tree.Nodes["1"];
            var stop  = Tree.Nodes["5"];

            var  traversal = new BreadthFirstTraversal();
            Node result    = null;
            int  depth     = 0;

            traversal.NodeDiscovered += (sender, args) =>
            {
                if (args.NewNode == stop)
                {
                    args.ContinueExploring = false;
                    args.Abort             = true;
                    result = args.NewNode;
                    depth  = args.Depth;
                }
            };

            // Act
            traversal.Run(start);

            // Assert
            Assert.Equal(stop, result);
            Assert.Equal(2, depth);
        }
예제 #4
0
        public void BreadthFirstOrderTest()
        {
            var traversal     = new BreadthFirstTraversal();
            var orderRecorder = new TraversalOrderRecorder(traversal);

            traversal.Run(Tree.Nodes["1"]);

            Assert.True(orderRecorder.GetIndex(Tree.Nodes["2"]) < orderRecorder.GetIndex(Tree.Nodes["4A"]));
            Assert.True(orderRecorder.GetIndex(Tree.Nodes["3A"]) < orderRecorder.GetIndex(Tree.Nodes["4A"]));
        }
예제 #5
0
        public void Test1()
        {
            var vertices        = new[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
            var verticesResults = new[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
            var edges           = new[] { Tuple.Create(1, 2), Tuple.Create(1, 3),
                                          Tuple.Create(2, 4), Tuple.Create(3, 5), Tuple.Create(3, 6),
                                          Tuple.Create(4, 7), Tuple.Create(5, 7), Tuple.Create(5, 8),
                                          Tuple.Create(5, 6), Tuple.Create(8, 9), Tuple.Create(9, 10) };

            Graph <int> graph      = new Graph <int>(vertices, edges);
            var         algorithms = new BreadthFirstTraversal();
            var         bft        = algorithms.BFS(graph, 1);

            Assert.Equal(bft, verticesResults);
        }
        public void BreadthFirst_Traversal()
        {
            var treeCreation = new BinarySearchTree();
            var list         = new List <int>()
            {
                2, 4, 3, 1
            };
            var tree = treeCreation.CreateTree(list).Result;

            list = new BreadthFirstTraversal().Traverse(tree);

            Assert.AreEqual(2, list[0]);
            Assert.AreEqual(1, list[1]);
            Assert.AreEqual(3, list[2]);
            Assert.AreEqual(4, list[3]);
        }
예제 #7
0
        public void BreadthFirstDepthShouldBeZeroOnFirstNode()
        {
            // Arrange
            var start = new Node("7");

            Tree.Nodes.Add(start);

            var traversal = new BreadthFirstTraversal();

            traversal.NodeDiscovered += (sender, args) =>
            {
                Assert.Equal(0, args.Depth);
            };

            // Act
            traversal.Run(start);

            // Assert done in NodeDiscoverd event handler.
        }
예제 #8
0
        public static void Main()
        {
            IGraph <char> graph = new Graph <char>();
            var           a     = graph.AddVertex('A');
            var           b     = graph.AddVertex('B');
            var           c     = graph.AddVertex('C');
            var           d     = graph.AddVertex('D');
            var           e     = graph.AddVertex('E');

            graph.AddEdge(a, b, 6);
            graph.AddEdge(b, a, 6);

            graph.AddEdge(a, d, 1);
            graph.AddEdge(d, a, 1);

            graph.AddEdge(d, e, 1);
            graph.AddEdge(e, d, 1);

            graph.AddEdge(d, b, 2);
            graph.AddEdge(b, d, 2);

            graph.AddEdge(e, b, 2);
            graph.AddEdge(b, e, 2);

            graph.AddEdge(e, c, 5);
            graph.AddEdge(c, e, 5);

            graph.AddEdge(c, b, 5);
            graph.AddEdge(b, c, 5);
            Console.WriteLine("Breadth-First iterative between two vertices: ");

            var breadthFirstIterative = BreadthFirstTraversal <char>
                                        .BreadthFirstSearchIterative(graph, a, c);

            foreach (var vertex in breadthFirstIterative)
            {
                Console.WriteLine(vertex);
            }
        }
예제 #9
0
 public BinarySearchTreeTest()
 {
     root = new Node <int>(8);
     breadthFirstTraversal = new BreadthFirstTraversal <int>();
 }