Java中的矩形包装

Posted

技术标签:

【中文标题】Java中的矩形包装【英文标题】:Rectangle packing in Java 【发布时间】:2016-11-10 15:53:29 【问题描述】:

我正在尝试实现一个矩形打包算法。

我的输入有一些矩形每个矩形都有一个高度和一个宽度(和一个索引号,所以我在记录它们时能够识别它们)

我有一个矩阵(一个 Integer[][]),我想将我的矩形存储在这个矩阵中。初始化后的矩阵不能修改,所以它的大小是固定的。

让我们看看例子,我们有两个矩形:

new Rectangle(2,3,1) //height=2, width=3, index=1
new Rectangle(1,2,2) //height=1, width=1, index=2

让我们有一个 3x3 矩阵:

Integer[][] matrix = new Integer[4][3]; //height=4, width=3

在我运行完算法后,我希望看到这样的东西(如果我将矩阵打印到 system.out):

1 1 1
1 1 1
2 2 0
0 0 0

前两行存储第一个矩形(2 高和 3 宽),我们在第三行找到第二个矩形。 0 表示还有空格(我们也可以在其中存储一些其他矩形)

我很难找到一个贪婪(或任何)算法的好方法。

我将矩形从大到小排序。 然后我应该开始以某种方式存储矩形:如果矩阵有足够的空间,我们把它放在那里,如果没有,我们尝试另一个单元格。我们在每一行和每个单元格上继续,直到找到一个位置。

谁能指出我正确的方向?关于一个好的算法、伪代码或我可以用来找出出路的东西的描述。

谢谢, 标记

【问题讨论】:

所以这是一个二维背包问题。 coursera.org/learn/discrete-optimization 该课程可能会有所帮助。就像这本书一样:algorist.com 如果我们“拥有和示例”,那么“你和我”将不会以任何方式将它组合在一起-“让我们有一个 3x3 矩阵 int[4][3]”:它是笑你搞混了!! 【参考方案1】:

您想在矩阵中“绘制”矩形,并且矩形已经按大小排序。

你可以/应该做一个循环:

获取矩形大小(取决于它是否由构造函数提供) 检查矩阵中是否有足够的空间用于矩形; 1 绘制(使用 for 或 while 循环绘制)。

1 使用matrix[0].lengthmatrix.length 获取矩阵大小并与矩形进行比较。

我认为最大的挑战是不要迷失在这些变量中。您需要计算开始绘制所需的行数以及何时停止和更新该变量。

【讨论】:

以上是关于Java中的矩形包装的主要内容,如果未能解决你的问题,请参考以下文章

Javascript中矩形的合理包装

java中关于矩形类

Java游戏中的矩形碰撞检测

使用Java中的2d数组打印带对角线的矩形

妹子-girls

如何通过按键旋转Java中的2D矩形?