我有一个预定大小的二维数组和一个适合该空间的编号矩形列表。这些矩形中的每一个都具有已知的固定高度和宽度。保证 2D 阵列足够大以舒适地适应所有矩形。
我需要将这些矩形中的每一个随机放置到数组中,以便没有重叠并且全部放置。它们可以放置在任何方向。想象一下,将您的船只置于战舰游戏中,只是拥有更多不同的船只尺寸和更大的网格。
完成后的数组应该是这样的:(0代表一个空格,一个非零数字代表一个矩形数字)
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 1 1 0 0 0 0 0 0 0 0 0 4 4 4 0
0 1 1 0 2 2 2 2 0 0 0 4 4 4 0
0 1 1 0 2 2 2 2 2 0 0 0 0 0 0 0 0
0 0 0 2 2 2 2 0 0 0 0 0 0 0 0
0 0 0 2 2 2 2 2 0 5 5 0 0 0 0
0 3 3 3 3 3 0 0 0 0 5 5 0 0 0 0
0 3 3 3 3 3 0 7 7 7 5 5 6 6 0 0
0 0 0 0 0 0 0 7 7 7 5 5 6 6 0 0
我考虑过的一种方法是为每个矩形选择一个随机的位置和方向,尝试将其放置在矩阵中。如果检测到与先前放置的块发生冲突,请重试。这可能是最简单的实现,但它似乎不是很有效,并且它不会以明确确定的方式终止(列表末尾附近的矩形可能会在很长一段时间内与先前生成的块发生冲突)。
有没有更好的方法来解决这个问题,放置后面的矩形不会那么成问题?