网格中的JAVA洞

时间:2013-02-10 00:30:04

标签: java grid

我需要在java中的2D网格中找到“洞” - 你能指点我做最好的算法吗?

输入以下几点:

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

我需要弄清楚这个网格中“洞”或包围空间的位置。关于如何做到这一点,我有点迷失。

积分图:

enter image description here

假设每个点都是1x1

1 个答案:

答案 0 :(得分:1)

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

1)找到最西端,最东端,最北端和最南端的任何固体。记住它们为xmin xmax ymin ymax。

2)用这些尺寸分配一个2d的整数数组(初始化为0),并将所有实心点放在其中作为值-1。

3)将计数器初始化为1.扫描2d阵列。每当您找到一个0的点时,将其设置为counter并将counter填充到每个不是-1的相邻点上,直到您的点数用完为止。 (要进行填充,一种方法是保留一组尚未填充所有邻居的所有点,并迭代这些点,向集合中添加新点,直到集合耗尽 - >没有任何剩余的填充物。)现在递增计数器并继续。

4)当您扫描整个网格时,扫描周边。每次在外围看到非-1时,将该blob标记为未被包围(通过使用bool数组,只要找到blob的数量)。

5)你没有标记的每个编号blob都被包围了。

在此处阅读blob提取:http://en.wikipedia.org/wiki/Blob_extraction