algorithm - 把正方形分成小正方形

标签 algorithm math

我有一个大广场。我想把这个正方形分成小正方形。我需要所有可能的组合。我知道有无数种组合,但我有一个限制。我有最小正方形的固定尺寸。

我可以使用蛮力来实现它。但是太长了。

这个任务有什么更好的算法吗?

谢谢!

最佳答案

这个问题只有在我们做出 2 个假设时才有解(否则会有无限组合)

1) 最小的正方形有固定大小
2)大方 block 的切割方式也是固定的,就好像把方 block 放到一个格子里,每条线之间的距离就是小方 block 的大小。

还有第三个假设可以使问题更容易一些

3) 大正方形的边长是小正方形的 K 倍。 K为整数。

如果两个假设都成立,我们可以继续:

找出 N(N 为整数)个最小正方形的数量:大小为 N*small-size 的正方形

 if ((big-size % N*small-size)==0)
    Number += (big-size / N*small-size)^2
 else
    Number += ((big-size / N*small-size)^2) * (big-size % N*small-size)

else 条件中的 * (big-size % Nsmall-size) 是因为如果 bigsquare 没有除以 N,当“网格化”gid-width 为 N 的大正方形时,我们将留下一个“小数部分”。这样我们就可以再次开始分割(再次网格化)但偏移量为 1、2 或 N 小步。步数为(big-size % Nsmall-size)。

同样,只有在采用 3 个假设的情况下,这些步骤才成立。

关于algorithm - 把正方形分成小正方形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/910097/

相关文章:

c++ - 请提出一些算法来找到树中所有节点中到最远节点的距离最小的节点

c++ - 除以 unsigned long long

c++ - 与我的 abs() 相比,C++ math.h abs() 有什么不同

javascript - javascript 减法问题

math - 云的算法

algorithm - 如何计算数字的最接近 2 或 10 的幂?

javascript - 算法:将度数解析为 x,y 以绘制 SVG 饼图的函数

java - 动态设置索引。这样所有可能的输入都可以被第一个整除

python - 在 Python 中合并重叠区间

python - 给定一个树高列表,找到尽可能少的尝试将它们砍倒