Exemplo n.º 1
0
 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);
 }
Exemplo n.º 2
0
            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);
                }
            }
Exemplo n.º 3
0
        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);
        }