将1d项放置在具有约束的2d网格中

时间:2014-05-04 03:15:34

标签: algorithm search

我正在为以下问题寻找算法(最好是多项式):

输入:
- 一个M×N网格,每个方格可以是空的或占用的 - 项目清单
- 约束列表

输出:
网格,以便放置所有项目并且不违反约束。

每个项目是长度为k的1d块。不同的物品可能具有不同的长度,并且可能存在具有相同长度的若干物品。物品不能相互叠加。

示例1: 给定1 x 5网格和2项长度1,2。以下解决方案是可以接受的:

11100

10110

11010

等等。

示例2: 给定3 x 5网格和2项长度1,2。以下解决方案是可以接受的:

00110
10000个
00000

11000
10000个
00000

可能的限制:
一个。隔离 - 物品可能不会相互接触。例如以下解决方案是非法的:

示例1:

11100

示例2:

11000
10000个
00000

然而,这是一个合法的解决方案:

01100
10000个
00000

即。触摸对角线是合法的。

湾面对 - 2个项目必须一个放在另一个之前。 e.g。

11000
00000
11000

到目前为止,我所做的是找到一个更简单问题的解决方案,其中网格是1d,唯一可能的约束是隔离。我通过将其表示为搜索问题来解决它,并使用带有启发式的A *:未放置的项目长度的总和。问题是它遭受状态爆炸,只会在更高的维度上恶化。

0 个答案:

没有答案