yes*_*esh 6 algorithm flood-fill
我最近在一次采访中被问到了这个问题,我无法弄清楚如何实现它.我希望有人能指出我如何处理这个问题的正确方向.
问题陈述:给定2D整数数组,找到可以容纳的总水量.数字代表地图中的高程(即山峰的高度).水从最高的山流到山谷(最高的高度到最低的高度).
例1:这是一个5 x 3矩阵.10是最高峰.你可以假设水流下来并开始收集在坐标2的瓷砖上(3, 1).这块瓷砖将收集7个单位的水.在以坐标溢出到高度为9的相邻瓷砖(2, 0) or (3, 0)并流入海洋之前(假设边缘被海洋包围).因此,为此地图收集的总水量为7.
9 9 9
9 10 9
9 9 9
9 2 10
10 10 10
Run Code Online (Sandbox Code Playgroud)
例2:
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
Run Code Online (Sandbox Code Playgroud)
在这种情况下,水可以在以下坐标中收集:
超过所有容量是14 + 4 = 18.
我尝试使用洪水填充来解决这个问题.通过找到从最高峰到最低的路径,并使用此路径确定可以存储在最低高度的水.我不确定我是否走在正确的道路上.有关如何解决这个问题的任何想法?
您走在正确的道路上,洪水已被填满。这是解决该问题的一种方法。
首先,将所有边缘瓷砖标记为已完成。
然后创建内部图块的排序列表,最低的在前。
对于列表中的每个图块执行洪水填充
然后增加山谷瓷砖的水平以匹配出口瓷砖的水平。如果出口瓷砖完成,那么所有山谷瓷砖现在都完成了。否则,扩大山谷以包括出口瓷砖。
以下是该算法如何处理问题的第二个示例。最初,边缘瓷砖已完成,而内部瓷砖尚未完成。
假设右上角的2是第一个。出口瓷砖是 3。因此,将 2 增加到 3,将 1 添加到总水量中。然后可以将 3s 增加到 4,将 3 加入到总水量中。4 已经完成,所以那个山谷现在已经完成了。
接下来是左下角的 2 之一。洪水填充会找到两个山谷瓷砖,出水口瓷砖是 9。因此我们可以将 7 添加到两个瓷砖,将 14 添加到总水量中。其中一个出口已经完工,因此山谷现已完工。
此时,每个剩余的瓷砖都与相同或更低的出口瓷砖相邻,并且也已完成。因此,所有剩余的图块都标记为已完成。总水量为 1+3+14 = 18。