public void Discover(Tech tech, Settlement.Settlement settlement) { settlement.AddMessage(new TechDiscoveredMessage(tech)); //Add all blueprints tech.Blueprints.ForEach(blueprint => settlement.Blueprints.Add(blueprint)); Discovered.Add(tech); }
public void Execute_BFS() { BFSQueue.Enqueue(sourceVertex); Discovered.Add(sourceVertex.Id); Parent.Add(sourceVertex.Id, -1); while (BFSQueue.Count != 0) { var current = BFSQueue.Dequeue(); ProcessVertex_Early(current); Processed.Add(current.Id); foreach (var node in current.AdjacencyList) { if (!Processed.Contains(node.Id)) { ProcessEdge(current, node); } if (!Discovered.Contains(node.Id)) { Discovered.Add(node.Id); BFSQueue.Enqueue(node); if (!Parent.ContainsKey(node.Id)) { Parent[node.Id] = current.Id; } else { Console.WriteLine("We shouldn't be here during BFS"); } } } ProcessVertex_Late(current); } }
internal HashSet <int> GetSafeIsland(int click_x, int click_y) { HashSet <int> result = new HashSet <int>(); Queue <int> q = new Queue <int>(); bool[][] visited = new bool[Row][]; foreach (int i in Enumerable.Range(0, Row)) { visited[i] = new bool[Col]; } foreach (int i in Enumerable.Range(0, Row)) { foreach (int j in Enumerable.Range(0, Col)) { visited[i][j] = false; } } visited[click_x][click_y] = true; q.Enqueue(click_x * Col + click_y); while (q.Count > 0) { int d = q.Dequeue(); result.Add(d); Discovered.Add(d); if (CountMines(d / Col, d % Col) > 0) { continue; } foreach (int neighbor in GetNeighbors(d / Col, d % Col)) { if (!visited[neighbor / Col][neighbor % Col]) { visited[neighbor / Col][neighbor % Col] = true; q.Enqueue(neighbor); } } } return(result); }