Advertisement
philRG

aoc 15 dijkstra (pour pardouin)

Dec 16th, 2021
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 0.61 KB | None | 0 0
  1. def dijkstra(grid, target, start=(0, 0), risk=0):
  2.     queue = [(risk, start)]
  3.     min_risk = {start: risk}
  4.     visited = {start}
  5.  
  6.     while queue:
  7.         risk, (x, y) = heapq.heappop(queue)
  8.         if (x, y) == target:
  9.             return risk
  10.         for neigh in ((x + 1, y), (x, y + 1), (x - 1, y), (x, y - 1)):
  11.             if neigh not in grid or neigh in visited: continue
  12.             visited.add(neigh)
  13.             new_risk = risk + grid[neigh]
  14.             if new_risk < min_risk.get(neigh, 999999):
  15.                 min_risk[neigh] = new_risk
  16.                 heapq.heappush(queue, (new_risk, neigh))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement