我将直接从示例开始:
在游戏中,玩家将使用一个包来存放他们的物品(物品尺寸可变),包也有可变的尺寸。
在一个8x15的插槽中,我需要插入占用2x2插槽的物品,我可以搜索空间以实际检查是否有足够的空间存放此物品 - 这很容易,但是,如果我不喜欢有足够的空间来存储所需的物品吗?这是真正的问题。
我正在尝试找到一种方法来实际重新排列当前包中的所有当前项目,以释放新项目的空间。
是否有任何算法可以帮助我做到这一点?
规则:
答案 0 :(得分:1)
我认为遗憾的是这是一个NP难题,但你可以使用贪婪的近似算法。近似算法可以如下工作:
这是基于直观的想法,即较大的部件比较小的部件“更难”放置。如果大多数项目是1x1,你可以做的另一件事是蛮力解决方案,这在如此小的库存中是非常可行的。这将如下工作:
这将始终解决您的问题,但速度较慢(虽然更准确)。这个算法可以通过遗漏每个1x1的片段,然后放置它们来证明。