双平方最大包装的图算法

时间:2013-01-04 03:35:29

标签: algorithm graph graph-algorithm

我有一个连接方块的区域(img在左边),并想找到可以装入该区域的最大数量的“双”方块(img在右边)。

我的方法是将原始区域表示为图形,其中每个方块表示由边缘连接到下方,上方,左侧和/或右侧的正方形的顶点。

我认为可以通过使用BFS算法,检查每个顶点并应用颜色来完成。但我也觉得可以通过动态编程来完成......我需要一些帮助!

enter image description here enter image description here

1 个答案:

答案 0 :(得分:6)

引理1:

如果我们将方块视为图中的顶点,由于其特殊结构,该图是二分图。 将每个顶点的边连接到其所有邻域顶点。

证明:

如果我们将每个方块涂成白色或黑色,我们可以形成没有两个相邻的黑色并且没有两个相邻的白色,因此图中的边缘只会介于一个黑色和一个白色之间。

算法:

构建二分图后,您可以找到 二分图的最大匹配 ,最大匹配的值将是答案。您可以使用匈牙利算法或更快的Hopcroft-Karp算法来计算答案。