Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def dijkstra(grid, target, start=(0, 0), risk=0):
- queue = [(risk, start)]
- min_risk = {start: risk}
- visited = {start}
- while queue:
- risk, (x, y) = heapq.heappop(queue)
- if (x, y) == target:
- return risk
- for neigh in ((x + 1, y), (x, y + 1), (x - 1, y), (x, y - 1)):
- if neigh not in grid or neigh in visited: continue
- visited.add(neigh)
- new_risk = risk + grid[neigh]
- if new_risk < min_risk.get(neigh, 999999):
- min_risk[neigh] = new_risk
- heapq.heappush(queue, (new_risk, neigh))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement