寻找网格岛的外边缘
Posted
技术标签:
【中文标题】寻找网格岛的外边缘【英文标题】:Finding outer edge of grid islands 【发布时间】:2014-10-28 21:44:38 【问题描述】:我正在尝试计算网格上岛屿的外边缘。每个网格图块有 4 个构成角的顶点,我想按顺时针方向计算边缘,以便对其进行排序。
我的网格是一个二维字节数组byte[,] grid
,我可以很容易地找到相邻的图块,但是我正在努力寻找找到岛屿边缘的解决方案。
0 0 0 0 0 0 0 0 0
1 1 1 0 0 0 1 1 0
1 1 1 0 0 0 1 1 0
1 1 1 1 1 0 0 0 0
1 1 1 1 1 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
在这张图片中,红点代表顶点,绿线代表我要查找的位。
有人知道如何实现这一点吗?
谢谢,C。
【问题讨论】:
【参考方案1】:基本上是这样的:
1) 检查每个方格是否已填满
2) 如果已满,检查邻居
3) 对于每个空闲的邻居,将线添加到这个正方形和邻居之间的列表中
您最终会得到一个列表,其中包含作为单独部分的完整边框。现在你需要用这个列表玩多米诺骨牌,这样你就可以得到所有岛屿的边界作为单独的有序列表,最后一块应该完全适合第一个。然后你甚至可以通过将相同方向的线段相加来对列表进行一些清理。
【讨论】:
这绝对是正确的方向,我正在收集每个“岛”外边缘的有序列表。通过将同一方向的行相加来清理列表的想法非常棒。【参考方案2】:如果在x
方向上的1
和y
方向上的1
内有零,则基本上一个顶点位于边上。所以对于顶点[a,b]
,您需要检查从[a-1,b-1]
到[a+1,b+1]
的每个顶点。注意顶点何时位于边缘,例如 [0,b]
或 [a,maxy]
。
【讨论】:
以上是关于寻找网格岛的外边缘的主要内容,如果未能解决你的问题,请参考以下文章