题目链接:1765. 地图中的最高点
多源广度优先搜索:贪婪的思路,从水域开始,逐渐填充相邻的格子。
from collections import deque
from typing import List
class Solution:
def highestPeak(self, isWater: List[List[int]]) -> List[List[int]]:
m = len(isWater)
if m == 0:
return isWater
n = len(isWater[0])
if n == 0:
return isWater
heights = [[0 if is_water == 1 else None for is_water in row] for row in isWater]
q = deque()
for i, row in enumerate(heights):
for j, h in enumerate(row):
if h is not None:
q.append((h, i, j))
def fill(h: int, i: int, j: int):
if 0 <= i < m and 0 <= j < n and heights[i][j] is None:
heights[i][j] = h + 1
q.append((h + 1, i, j))
while q:
h, i, j = q.popleft()
fill(h, i - 1, j)
fill(h, i, j - 1)
fill(h, i + 1, j)
fill(h, i, j + 1)
return heights