代码之家  ›  专栏  ›  技术社区  ›  yesh

二维数组中的总水容量,表示地形图

  •  6
  • yesh  · 技术社区  · 6 年前

    我最近在一次采访中被问到这个问题,我不知道如何实现它。我希望有人能给我指出解决这个问题的正确方向。

    问题陈述:给定一个二维整数数组,找出可以容纳的总水量。数字表示地图中的海拔高度(即山的高度)。水从最高的山流向山谷(从最高到最低)。

    例1:这是 5 x 3 矩阵。10是最高峰。你可以假设水向下流动,并开始在第2块地砖处收集,该地砖处于坐标位置 (3, 1) . 此磁贴将收集 水的单位。在以坐标方向溢出到相邻高度为9的瓷砖之前 (2, 0) or (3, 0) 流入海洋(假设边缘被海洋包围)。所以为这张地图收集的水总量是 .

    9  9  9
    9 10  9
    9  9  9
    9  2  10
    10 10 10
    

        9   9  9  9  9 9
        9  10  9  8  2 4
        9   9  9 10  3 5
        9   2  2 10  3 5
       10 10  10 10  9 9
    

    在这种情况下,水可以按以下坐标收集:

    1. (3,1)和(3,2)。所以总容量=>7+7=14
    2. (1,4)(2,4)和(3,4)。这些坐标可以分别存储2、1、1。因为在水开始以坐标(1,5)从边缘溢出之前,它们能容纳的最大值是4。所以总容量=>2+1+1=4

    总容量为14+4=18。

    1 回复  |  直到 6 年前
        1
  •  3
  •   user3386109    6 年前

    你在洪水泛滥的正确道路上。这里有一个解决问题的方法。

    首先,将所有边缘瓷砖标记为完工。

    对列表中的每个平铺执行洪水填充

    1. 查找与最低平铺(山谷平铺)处于同一级别的所有平铺
    2. 确定是否已完成任何出口平铺

    然后增加山谷瓷砖的级别以匹配出口瓷砖的级别。如果出口瓷砖已完成,则所有山谷瓷砖现在都已完成。否则,扩展山谷以包括出口瓷砖。


    enter image description here

    假设右上角的2是第一个。出口瓷砖是3。所以把2增加到a 3,在总水量上加1。将3s增加到4,总水量增加3。四个已经完成了,所以山谷现在也结束了。

    enter image description here

    下一个是左下角的一个2。洪水漫灌会发现两个山谷瓦片,出口瓦片是9。所以我们可以加7到2块瓷砖,加14块水。其中一个出口完工了,所以山谷现在完工了。

    enter image description here