

0 / 2 embers
0 / 3000 xp
click for more info
Complete a lesson to start your streak
click for more info
Still calibrating
click for more info
Not enough gems
Cost: 6 gems
1: Traffic Tiles
incomplete
2: Traffic Grid
incomplete
3: A* Search Algorithm
incomplete
4: A* Code
incomplete
5: A* Search Review
incomplete
This lesson's interactive features are locked, please to keep using them
Use this implementation of A* to answer the question:
def heuristic(next: "Tile", dest: "Tile") -> int:
h: int = abs(next.x - dest.x) + abs(next.y - dest.y)
return h
def a_star_search(muddy_grid: "TrafficGrid", src: "Tile", dest: "Tile") -> list["Tile"]:
queue: PriorityQueue = PriorityQueue()
queue.push(0, src)
predecessors: dict["Tile", "Tile" | None] = {src: None}
costs: dict["Tile", int] = {src: 0}
visited: set["Tile"] = set()
while not queue.empty():
current: "Tile" = queue.pop()
if current == dest:
break
if current in visited:
continue
visited.add(current)
for next in muddy_grid.neighbors(current):
next_cost_so_far: int = costs[current] + next.cost()
if next not in costs or next_cost_so_far < costs[next]:
costs[next] = next_cost_so_far
priority: int = next_cost_so_far + heuristic(next, dest)
queue.push(priority, next)
predecessors[next] = current
path: list["Tile"] = []
pred: "Tile" | None = dest
while pred is not None:
path.append(pred)
pred = predecessors.get(pred, None)
path.reverse()
return path