【发布时间】:2012-08-17 11:02:09
【问题描述】:
我将直接从示例开始:
在游戏中,玩家将使用一个袋子来存放他们的物品(物品的尺寸可变),并且袋子的尺寸也是可变的。
在一个 8x15 插槽的袋子中,我需要插入一个占用 2x2 插槽的项目,我可以搜索空间以实际检查是否有足够的空间来存储该项目 - 这很容易,但是,如果我不这样做呢?没有足够的空间来存储请求的项目?这是真正的问题。
我正在尝试找到一种方法来实际重新排列当前包中的所有当前项目,以便为新项目释放空间。
有什么算法可以帮助我做到这一点吗?
编辑
规则:
- 我无法移除包中的任何现有物品,如果空间不足,只需重新排列它们以便存放新物品。
【问题讨论】:
-
@Jochen 这不是背包问题,因为我们不是试图获得最大的子集,而是试图确定一个特定的集合是否适合给定的容器。
-
单个项目可以是什么形状和大小?如果他们受到约束,问题就会变得容易得多。
-
@bdares 实际上我有一些可变尺寸,1x1、1x2、1x4、2x2、2x4、3x3、4x3,但这可以改变。
-
我没有手边的算法,但我会写一个从最大到最小的算法,然后从那里开始工作。您总是可以找到一个可以放置 1x1 物品的位置,但最后使用 5x2 物品可能更具挑战性。
标签: algorithm language-agnostic