public AStarSearch(WeightedGraph<Position> graph, Position start, Position goal)
    {
        var frontier = new SimplePriorityQueue<Position>();
        frontier.Enqueue(start, 0);

        cameFrom[start] = start;
        costSoFar[start] = 0;

        while (frontier.Count > 0)
        {
            var current = frontier.Dequeue();

            if(current.Equals(goal))
            {
                break;
            }

            foreach (var next in graph.Neighbors(current))
            {
                int newCost = costSoFar[current] + graph.Cost(current, next);
                if (!costSoFar.ContainsKey(next) || newCost < costSoFar[next])
                {
                    costSoFar[next] = newCost;
                    int priority = newCost + Heuristic(next, goal);
                    frontier.Enqueue(next, priority);
                    cameFrom[next] = current;
                }
            }
        } 
    }
Ejemplo n.º 2
0
            public AStarSearch(WeightedGraph <Location> graph, Location start, Location goal)
            {
                var frontier = new PriorityQueue <Location>();

                frontier.Enqueue(start, 0);

                cameFrom[start]  = start;
                costSoFar[start] = 0;

                while (frontier.Count > 0)
                {
                    var current = frontier.Dequeue();

                    if (current.Equals(goal))
                    {
                        break;
                    }

                    foreach (var next in graph.Neighbors(current))
                    {
                        double newCost = costSoFar[current]
                                         + graph.Cost(current, next);
                        if (!costSoFar.ContainsKey(next) ||
                            newCost < costSoFar[next])
                        {
                            costSoFar[next] = newCost;
                            double priority = newCost + Heuristic(next, goal);
                            frontier.Enqueue(next, priority);
                            cameFrom[next] = current;
                        }
                    }
                }
            }
Ejemplo n.º 3
0
        public AStarSearch(WeightedGraph <Vector3Int> graph, Vector3Int start, Vector3Int destination)
        {
            var frontier = new PriorityQueue <Vector3Int>();

            frontier.Enqueue(start, 0);

            CameFrom[start]  = start;
            CostSoFar[start] = 0;

            while (frontier.Count > 0)
            {
                var current = frontier.Dequeue();

                if (current.Equals(destination))
                {
                    Path.Add(current);
                    var rear = current;

                    while (CameFrom.ContainsKey(rear) && CameFrom[rear] != rear)
                    {
                        Path.Add(CameFrom[rear]);
                        rear = CameFrom[rear];
                    }

                    Path.Reverse();
                    break;
                }

                foreach (var next in graph.Neighbors(current))
                {
                    var newCost = CostSoFar[current] + graph.Cost(current, next);

                    if (!CostSoFar.ContainsKey(next) || newCost < CostSoFar[next])
                    {
                        CostSoFar[next] = newCost;
                        var priority = newCost + Heuristic(next, destination);
                        frontier.Enqueue(next, priority);
                        CameFrom[next] = current;
                    }
                }
            }
        }