【问题标题】:JAVA Hole in Grid网格中的 JAVA 孔
【发布时间】:2013-01-25 10:35:00
【问题描述】:

我需要在 Java 中的 2D 网格中找到“洞” - 你能告诉我最好的算法吗?

输入以下几点:

5,3
5,4
8,4
5,5
6,3
7,3
7,4
6,5

我需要找出这个网格中“洞”或包围空间的位置。我对如何做到这一点有点迷茫。

点的情节:

假设每个点是 1x1

【问题讨论】:

  • 我曾考虑寻找旁边没有“填充”点的空间,但这不适用于带有内部未环绕正方形的孔的网格。
  • fooplot.com/plot/cxv0h77f18 - 如果每个点都是 1x1,则点的绘图
  • 在这种情况下,“洞”的准确定义是什么?在网格上, (4, 6) 是否被认为是一个“洞”,因为它被所有四个点包围,并且是边?

标签: java grid


【解决方案1】:

这基本上是一个 blob 提取算法 + 一点额外的。这样做:

1) 找到放置任何实体的最西、最东、最北和最南。记住它们为 xmin xmax ymin ymax。

2) 分配具有这些维度的二维整数数组(初始化为 0),并将所有实心点作为值 -1 放入其中。

3) 将计数器初始化为 1。扫描二维数组。每次找到一个为 0 的点时,将其设置为 counter 并将 counters 填充到每个不是 -1 的相邻点上,直到用完可以填充的点为止。 (要进行填充,一种方法是保留一组尚未填充所有邻居的所有点,然后迭代这些点,将新点添加到集合中,直到集合用尽 -> 没有任何东西可以填充到.) 现在增加计数器并继续。

4) 扫描整个网格后,扫描周边。每次您在外围看到非 -1 时,将该 blob 标记为没有被包围(通过与您找到的 blob 数量一样长的 bools 数组)。

5) 您未标记的每个编号的 blob 都会被包围。

在此处了解 blob 提取:http://en.wikipedia.org/wiki/Blob_extraction

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-16
    • 2021-03-08
    • 2018-11-25
    • 1970-01-01
    • 2014-02-01
    • 2014-02-17
    • 2016-12-05
    • 2014-10-17
    相关资源
    最近更新 更多