1765. 地图中的最高点

exiaohu 于 2022-01-29 发布

题目链接: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