【发布时间】:2020-07-23 04:35:37
【问题描述】:
有一个由 h * w (h, w 一个连续的区域是这样定义的:
- 给定一个点 P(x, y),连接区域必须包含这个点。
- 存在值为v的参考点R(x, y),连通区域中的任何点都必须与该点相连。此外,还有一个值 g_critical(g_critical
问题是找出最大连通区域的大小。
例如网格。 h = 5, w = 5, g_critical = 3, P(x, y) = (2, 4)
1 3 7 9 2
2 5 6 6 8
3 5强> 9 3 6
2 7 3 2 9
在这种情况下,粗体区域是最大的连接区域。请注意,在这种情况下,在 (2, 3) 或 (2, 2) 处选择了 R(x, y)。区域大小为 14。
我稍微改写了这个问题,所以它更短。因此,如果有任何歧义,请在评论中指出。这个问题也在我们的私人法官中,所以我无法在这里分享问题来源。
我的尝试
我尝试循环遍历每个单元格,将其视为 R 点并使用 bfs 查找连接到它的连接区域。然后,检查 P 是否包含在该区域中。
复杂度是O(h * h * w * w),太大了。那么有什么办法可以优化呢?
我猜也许以 p 开头会有所帮助,但我不知道该怎么做。也许有某种洪水填充算法可以让我这样做?
提前致谢。
【问题讨论】:
-
g_critical 有多大?对于小 g 值和大矩阵大小,简单的方法就是检查从 P-g 到 P+g 的可能中间值(所以 O(hwg))
-
g_critical 最高可达 100000
-
太多了,所以这种方式不合适。
-
我不认为这是这些数字的最大区域。如果您选择 R(x,y) 作为 (3,2) 或 (4,2) (是的,与 P 相同 - 这是被禁止的吗?)。您似乎从 3..9 得到 15 个数字。
-
@Hans 你说得对,我稍后再编辑
标签: algorithm grid graph-algorithm breadth-first-search flood-fill