Faaez Razeen

Swim in Rising Water

  • 3 min read
  • Graph
  • LC-Hard

3 years ago

Solution

Show less

TimeSpaceExplanation
O()O()
def swimInWater(self, grid: List[List[int]]) -> int: n = len(grid) q = [(grid[0][0], 0, 0)] vis = set() vis.add((0, 0)) while q: cost, r, c = heappop(q) if r == c == n - 1: return cost for dr, dc in [(0, 1), (0, -1), (1, 0), (-1, 0)]: nr, nc = r + dr, c + dc if nr >= 0 and nr < n and nc >= 0 and nc < n and (nr, nc) not in vis: vis.add((nr, nc)) heappush(q, (max(cost, grid[nr][nc]), nr, nc))