【发布时间】:2017-10-04 11:31:51
【问题描述】:
所以基本上我想创建一个方法,将二维数组作为 1 个参数,将矩形的宽度和高度作为其他 2 个参数。二维数组仅包含二进制数(0 - 空单元格,1 - 占用单元格)。如果 bin 中仍有足够的空间容纳矩形,则该方法应返回 true。
我的主要问题是我不知道如何在检查数组中是否确实存在 rectHeight*rectWidth 大小的空白空间时遍历 2d 数组。
现在我只检查 4 个顶点是否可用,但这显然还不够。
for (int j = y; j < y + rowHeight - rectHeight + 1; j++){
for (int k = 0; k < bin[j].length - rectWidth + 1; k++){
if (bin[j][k] == 0 && bin[j][k + rectWidth - 1] == 0 && bin[j + rectHeight - 1][k] == 0 && bin[j + rectHeight - 1][k + rectWidth - 1] == 0){
isOne = true;
for (int l = j; l < j + rectHeight; l++){
for (int m = k; m < k + rectWidth; m++){
bin[l][m] = not_positioned.get(i).getId();
}
}
not_positioned.remove(i);
}
}
}
【问题讨论】:
-
提示:编写一个函数,该函数接受一个二维数组、一对索引 i 和 j,以及一个宽度、高度对。当且仅当可以在该二维数组中的位置 (i, j) 放置一个宽度*高度矩形时,它才应该返回 true。顺便说一句,如果您真的关心时间复杂度,您将不得不使用更智能的东西。
-
向我们展示您迄今为止尝试过的代码。
-
你到底有什么不知道的?我假设您了解如何迭代 2D 数组以及如何检查插槽是否为空。到目前为止你尝试了什么?您是在寻求任何可行的解决方案还是高效解决方案? (如果是后者,您已经对该主题进行了哪些研究?)
-
我已经实现了按高度和填充算法排序,但在我的情况下这还不够,因为我有一个固定的 binwidth 和 binheight,因此该算法在大多数情况下都不会成功。所以当算法必须开始一个新行时,我想在新行开始之前检查是否有另一个矩形的空间。
标签: java arrays multidimensional-array bin-packing