C用于确定点阵中最大多边形的算法

时间:2013-10-05 22:29:20

标签: c algorithm

这是一个令我烦恼的问题。

给出一组要点,说:

1 1 1 1
1 1 1 1
1 1 1 1
1 1 1 1

最大的多边形是4x4平方。为此:

0 0 1 1 1 
0 1 1 1 1
1 1 1 1 1  

最大的是梯形,但会出现不规则和其他变化......

如何确定最大可能? (最大的意思是不能被任何其他多边形包围)我应该使用什么样的算法?

他们也需要其他属性,如面积,周长,凸面(t / f)和不变旋转的数量......


这是在说明书中提供的,但我真的不明白究竟是什么......

  

调用编码任何大小介于2x2和50x50之间的二维数组(两个维度可以不同),   所有元素都是0或1。   调用编码成员m邻居,其中最多有八个数组成员,其值为1,   并且每个索引都与m的相应索引相差最多1.给定一个特定的编码,我们   归纳地确定所有自然数d深度d(对于此编码)的多边形集合,如下所示:

     

让一个   给出自然数d,并假设对于所有d 0 < d,确定了深度为d 0 的多边形集合。   将所有1的编码更改为将这些多边形确定为0.然后确定深度为d的多边形集   作为一组多边形,可以通过将1与它们的一些邻居连接起来从该编码中获得   以这种方式,我们获得一个最大的多边形(即,不包含在任何其他多边形中的多边形   通过将1与其邻居连接起来,从该编码中获得。)

2 个答案:

答案 0 :(得分:1)

也许我太不耐烦了,但我发现你给出的关于笨拙的说明,我明白为什么你发现它们很难理解。

您已经指定了答案,但这里有一些您可能希望探索的相关主题。

凸壳可能是你想要的。凸包通常被描述为2D空间中的点都是钉板中的钉子。围钉外侧的橡皮筋形状为凸壳。

http://en.m.wikipedia.org/wiki/Convex_hull_algorithms

此外,收缩(或增长)1s并将其替换为0的操作听起来像是形态上的“侵蚀”操作。

http://en.m.wikipedia.org/wiki/Erosion_(morphology)

答案 1 :(得分:0)

Create some integer B, set it to zero.

For every point p:
    If p has not been marked as "been":
        Mark p as "been"
        BFS/DFS from p and count the number of adjacent reachable points. Also mark each of these points as "been".
        If the number of reachable points + 1 is greater than B:
            B = the number of reachable points + 1

最后,B =多边形的最大尺寸(以“覆盖”为单位)。