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')]); }
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"); }
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); }
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); }