public void BreadthFirstSearch_ShouldThrowArgumentNullException_WhenInputParametersAreInvalid(GraphBase<int> graph, int initialVertex, Action<int> action) { var bfsAlgorithm = new BreadthFirstSearch<GraphBase<int>, int>(); Assert.Throws<ArgumentNullException>(() => { bfsAlgorithm.Execute(graph, initialVertex, action); }); }
public void BreadthFirstSearch_ShouldThrowArgumentException_WhenInitialVertexDoesNotExistInGraph(GraphBase<int> graph, int initialVertex) { var bfsAlgorithm = new BreadthFirstSearch<GraphBase<int>, int>(); Assert.Throws<ArgumentException>(() => { bfsAlgorithm.Execute(graph, initialVertex, vertex => { }); }); }
public void Execute(Graph graph) { BreadthFirstSearch algorithm = new BreadthFirstSearch(); var vertices = algorithm.Execute(graph, graph.StartPoint, graph.EndPoint); string count = (vertices.Count()).ToString(); System.Console.WriteLine($"De talisman licht op en fluistert dat het eindpunt {count} ver weg is"); }
public void BreadthFirstSearch_ShouldPerformSpecifiedAction_ForAllVerticesInConnectedComponent(GraphBase<int> graph, int initialVertex, IEnumerable<int> expectedVisitedVertices) { var bfsAlgorithm = new BreadthFirstSearch<GraphBase<int>, int>(); var result = new List<int>(); bfsAlgorithm.Execute(graph, initialVertex, vertex => { result.Add(vertex); }); Assert.Equal(expectedVisitedVertices, result); }
private void CreatePathsToAllGreenTiles(Grid <Tile> grid, int iteration = 0) { //WARNING: DO NOT ADD LOGS WITHOUT PERFORMANCE CONSIDERATION //This function can get called a lot. If there are a lot of logs, it can freeze the game. iteration++; var allGreenTiles = GetAllGreenTiles(grid); var randomGreenTile = allGreenTiles.Values.ToList()[Random.Range(0, allGreenTiles.Count)]; //Try to visit every single grass tile using breadth first search. var breadthsFirstSearch = new BreadthFirstSearch(grid, true); breadthsFirstSearch.Execute(randomGreenTile, int.MaxValue, new List <TileType> { TileType.Grass }); var visitedTiles = breadthsFirstSearch.GetVisitedTiles(); visitedTiles[(randomGreenTile.GridX, randomGreenTile.GridY)] = randomGreenTile;
public override void Execute() { // build the graph Graph <T> graph = new Graph <T>(); //graph.AddUndirectedEdge("Frankfurt", "Wiesbaden", 40); //graph.AddUndirectedEdge("Frankfurt", "Mainz", 30); //graph.AddUndirectedEdge("Mainz", "Wiesbaden", 15); //graph.AddUndirectedEdge("Rüdesheim", "Geisenheim", 4); foreach (MatchPair <T> matchpair in this.matches) { graph.AddUndirectedEdge(matchpair.From, matchpair.To, matchpair.Cost); } BreadthFirstSearch <T> bfsSearch = new BreadthFirstSearch <T>(); // take every node from the graph as startnode for the search e.g. "Frankfurt", "Wiesbaden", "Mainz", "Rüdesheim", "Geisenheim" GraphNode <T> startNode = null; GraphNode <T> endNode = null; int cost = graph.Infinity; int i = 0; while (i < graph.Nodes.Count) { var cluster = new List <MatchPair <T> >(); // take current node as startnode and search the whole graph for reachable nodes startNode = (GraphNode <T>)graph.Nodes[i]; bfsSearch.Execute(startNode, null, null); // add the found nodes to the subgraph int j = 0; while (j < bfsSearch.AllNodes.Count) { endNode = (GraphNode <T>)bfsSearch.AllNodes[j]; cost = startNode.CostToNeighbor(endNode); if (!startNode.Equals(endNode)) { var matchPair = new MatchPair <T>(startNode.Value, endNode.Value, cost); // check, if it is in the original list if (this.matches.Contains(matchPair)) { // check, if a connection point (startnode or endnode) is already in another cluster var found = this.IsInOtherCluster(matchPair); if (!found) { // add to the new cluster cluster.Add(matchPair); } } } j++; } // when a cluster was build, add to the clusterlist if (cluster.Count > 0) { this.clusters.Add(cluster); } // clusters will be e.g. // Cluster 1: (Frankfurt, Wiesbaden, Mainz) // Cluster 2: (Rüdesheim, Geisenheim) i++; } }