public void search_breadth_first()
        {
            var a = new Vertex <string>
            {
                Value = "Cat"
            };
            var b = new Vertex <string>
            {
                Value = "Rat"
            };
            var c = new Vertex <string>
            {
                Value = "Dog"
            };
            var d = new Vertex <string>
            {
                Value = "Dog"
            };

            a.AddEdge(b);
            b.AddEdge(c);
            a.AddEdge(d);
            var graph = new Graph <string>();

            graph.AddVertex(a);
            graph.AddVertex(b);
            graph.AddVertex(c);
            graph.AddVertex(d);
            var bfsSearcher = new BreadthFirstSearcher <string>();

            var result = bfsSearcher.Search(graph, a, s => s == "Dog");

            result.Should().Be(d);
        }
        public void ShouldSearchGraph()
        {
            var graph = new Graph <char>();

            graph.AddVertices('r', 's', 't', 'u', 'v', 'w', 'x', 'y');
            graph.AddEdge('r', 'v');
            graph.AddEdge('s', 'r');
            graph.AddEdge('s', 'w');
            graph.AddEdge('w', 't');
            graph.AddEdge('w', 'x');
            graph.AddEdge('t', 'x');
            graph.AddEdge('x', 't');
            graph.AddEdge('x', 'y');
            graph.AddEdge('x', 'u');
            graph.AddEdge('t', 'u');
            graph.AddEdge('y', 'u');
            graph.AddEdge('u', 'y');

            var searcher = new BreadthFirstSearcher <char>();
            IDictionary <Vertex <char>, int> distances = searcher.BreadthFirstSearch(graph.GetVertex('s'));

            Assert.AreEqual(3, distances[graph.GetVertex('y')]);
            Assert.AreEqual(2, distances[graph.GetVertex('t')]);
            Assert.AreEqual(1, distances[graph.GetVertex('r')]);
            Assert.AreEqual(1, distances[graph.GetVertex('w')]);
            Assert.AreEqual(2, distances[graph.GetVertex('v')]);
        }
Example #3
0
        private void ViewPort_Loaded(object sender, RoutedEventArgs e)
        {
            width           = (int)this.ViewPortContainer.ActualWidth;
            height          = (int)this.ViewPortContainer.ActualHeight;
            writeableBitmap = BitmapFactory.New(width, height);
            ViewPort.Source = writeableBitmap;
            PrintTheMap();



            CompositionTarget.Rendering += CompositionTarget_Rendering;
            MazeState state = new MazeState();

            if (ALGORITHM_CHOOSER == 0)
            {
                var dfs = new DeepFirstSearcher(state);
                new Thread(() => dfs.Search()).Start();
            }
            if (ALGORITHM_CHOOSER == 1)
            {
                var bfs = new BreadthFirstSearcher(state);
                new Thread(() => bfs.Search()).Start();
            }
            if (ALGORITHM_CHOOSER == 2)
            {
                var ast = new AStarSearcher(state);
                new Thread(() => ast.Search()).Start();
            }
        }
        public void return_null_if_starting_vertex_not_in_graph()
        {
            var a = new Vertex <string>
            {
                Value = "Dog"
            };
            var b = new Vertex <string>
            {
                Value = "Dog"
            };
            var c = new Vertex <string>
            {
                Value = "Dog"
            };

            a.AddEdge(b);
            b.AddEdge(c);
            var graph = new Graph <string>();

            graph.AddVertex(b);
            var bfsSearcher = new BreadthFirstSearcher <string>();

            var result = bfsSearcher.Search(graph, a, s => s == "Dog");

            result.Should().Be(null);
        }
        public static void DoTest()
        {
            IGraph <string> graph = new UndirectedSparseGraph <string>();

            // Add vertices
            var verticesSet1 = new string[] { "a", "z", "s", "x", "d", "c", "f", "v" };

            graph.AddVertices(verticesSet1);

            // Add edges
            graph.AddEdge("a", "s");
            graph.AddEdge("a", "z");
            graph.AddEdge("s", "x");
            graph.AddEdge("x", "d");
            graph.AddEdge("x", "c");
            graph.AddEdge("d", "f");
            graph.AddEdge("d", "c");
            graph.AddEdge("c", "f");
            graph.AddEdge("c", "v");
            graph.AddEdge("v", "f");

            // Print the nodes in graph
            Console.WriteLine(" [*] BFS PrintAll: ");
            BreadthFirstSearcher.PrintAll(graph, "d");
            Console.WriteLine("\r\n");

            string             searchResult    = null;
            string             startFromNode   = "d";
            Action <string>    writeToConsole  = (node) => Console.Write(String.Format("({0}) ", node));
            Predicate <string> searchPredicate = (node) => node == "f" || node == "c";

            Console.WriteLine("[*] BFS Visit All Nodes:");
            Console.WriteLine("Graph traversal started at node: '" + startFromNode + "'");

            BreadthFirstSearcher.VisitAll(ref graph, startFromNode, writeToConsole);

            Console.WriteLine("\r\n");

            try
            {
                searchResult = BreadthFirstSearcher.FindFirstMatch(graph, startFromNode, searchPredicate);

                Debug.Assert(searchResult == "c" || searchResult == "f");

                Console.WriteLine("[*] BFS Find First Match:");
                Console.WriteLine(
                    String.Format(
                        "Search result: '{0}'. The search started from node: '{1}'."
                        , searchResult
                        , startFromNode));
            }
            catch (Exception)
            {
                Console.WriteLine("Search predicate was not matched by any node in the graph.");
            }

            Console.WriteLine("\r\n");
        }
Example #6
0
        public bool SearchBreadthFirst(T thing)
        {
            if (_root == null)
            {
                return(false);
            }

            var bfs = new BreadthFirstSearcher <T>();

            return(bfs.Search(_root, thing));
        }
        public void return_starting_vertex_if_meets_criteria()
        {
            var a = new Vertex <string>
            {
                Value = "Dog"
            };
            var b = new Vertex <string>
            {
                Value = "Dog"
            };

            a.AddEdge(b);
            var graph = new Graph <string>();

            graph.AddVertex(a);
            graph.AddVertex(b);
            var bfsSearcher = new BreadthFirstSearcher <string>();

            var result = bfsSearcher.Search(graph, a, s => s == "Dog");

            result.Should().Be(a);
        }
Example #8
0
        public void BreadthFirstSearchTest(Graph graph, string[] order)
        {
            // a --- b ----------f---------h
            //  -               -
            //   -           -
            //   -        -
            //   c------d-------e----------g
            "Given an undirected graph".x(() =>
            {
                graph = new Graph();

                var a = new GraphNode()
                {
                    name = "a"
                };
                var b = new GraphNode()
                {
                    name = "b"
                };
                var c = new GraphNode()
                {
                    name = "c"
                };
                var d = new GraphNode()
                {
                    name = "d"
                };
                var e = new GraphNode()
                {
                    name = "e"
                };
                var f = new GraphNode()
                {
                    name = "f"
                };
                var g = new GraphNode()
                {
                    name = "g"
                };
                var h = new GraphNode()
                {
                    name = "h"
                };

                a.children = new GraphNode[] { b, c };
                b.children = new GraphNode[] { a, f };
                c.children = new GraphNode[] { a, d };
                d.children = new GraphNode[] { e, c, f };
                e.children = new GraphNode[] { d, g };
                f.children = new GraphNode[] { h, b, d };
                g.children = new GraphNode[] { e };
                h.children = new GraphNode[] { f };

                graph.root = a;
            });

            "When I do a breadth first search".x(() =>
            {
                var searcher = new BreadthFirstSearcher();
                order        = searcher.PrintOrder(graph);
            });

            "Then the print order is as expected".x(() =>
            {
                var expected = new[] { "a", "b", "c", "f", "d", "h", "e", "g" };
                Assert.Equal(expected, order);
            });
        }
    void FindPath()
    {
        BreadthFirstSearcher breadthFirstSearcher = new BreadthFirstSearcher();

        breadthFirstSearcher.BreadthFirstSearch(grid, startWaypoint, endWaypoint, searchCenter);
    }