我正在尝试实现矩形打包算法。
我的输入上有一些矩形每个矩形都有一个高度和一个宽度(以及一个索引号,所以我可以在记录它们时识别它们)
我有一个矩阵(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表示剩下空白区域(我们也可以在那里存储其他矩形)
我很难找到贪婪(或任何)算法的好方法。
我将矩形从大到小排序。 然后我应该开始存储矩形:如果矩阵有足够的空间,我们把它放在那里,如果没有,我们尝试另一个单元格。我们继续在每一行和每一个细胞上,直到我们找到一个地方。
有人能指出我正确的方向吗?关于一个好的算法,伪代码或者我可以用来解决问题的东西的描述。
谢谢, 标记
答案 0 :(得分:0)
您想要在矩阵中“绘制”矩形,并且您已经按大小对矩形进行了排序。
你可以/应该做一个循环:
1 使用matrix[0].length
和matrix.length
获取矩阵大小并与矩形进行比较。
我认为最大的挑战不是迷失在这些变量中。您需要继续计算开始绘制所需的行数以及何时停止和更新该变量。