我已经有这个问题几年了。早在我的城市举行信息学竞赛。我没有解决它,我的老师没有解决它。我没有遇到任何能够解决问题的人。我认识的人知道要给出答案的正确方法,所以我决定把它张贴在这里:用最少量的固定半径圆圈完全覆盖矩形
泽问题
给出一个矩形,X的Y,找到圆的最小量N之间的固定给定半径R,这是完全覆盖矩形的每个部分所必需的。
我想过解决这个问题的方法,但是我什么都没有确定。如果每个圆定义一个内部矩形,则R^2 = Wi^2 + Hi^2
,其中Wi
和Hi
是每个圆所覆盖的实际区域的宽度和高度i
。起初我以为我应该让Wi
等于Wj
任何i
= j
,H
相同。这样,我可以通过使宽高比与主矩形相等来简化问题(Wi/Hi
= X/Y
)。那样,N=X/Wi
。但是,如果X
大大超过Y
,则该解决方案肯定是错误的,反之亦然。
第二个想法是对于任何给定的i
,Wi
= Hi
。这样,正方形可以最有效地填充空间。但是,如果仍然存在非常窄的条带,则最好使用矩形填充它,或者更好 - 在此之前也使用最后一行的矩形。
然后我意识到没有任何想法是最佳的,因为我总是可以找到更好的方法来做到这一点。它总是接近决赛,但不是最终决赛。
编辑
在一些情况下(大矩形)接合六边形似乎比接合正方形更好的解决方案。
更多编辑
下面是2种方法的比较:三叶草与六角形。对于大型表面,六角形显然更好。然而,我认为当矩形足够小时,矩形方法可能更有效。这是一种预感。现在,在图片中,您会看到左侧14圈,右侧13圈。虽然表面差异比一圈大得多(双倍)。这是因为它们在左侧重叠较少,因此浪费较少的表面。
的问题仍然存在:
- 是正六边形图案本身最佳的?或者应在主矩形的某些部分进行某些调整。
- 有没有理由不使用常规形状作为“最终解决方案”?
- 这个问题甚至有答案吗? :)
这看起来更像数学而不是编程。 –
我会建议在数学上问.S http://math.stackexchange.com/ – yoozer8
如果它不是一个可以解决它的公式,但是一个复杂的算法?我只会重播它。 – AlexanderMP