algorithm - 双正方形最大堆积图算法

标签 algorithm graph graph-algorithm

我有一个由相连方 block 组成的区域(左边的 img),我想找到可以放入该区域(右边的 img)中的“双”方 block 的最大数量。

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

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

enter image description here enter image description here

最佳答案

引理 1:

如果我们将正方形视为图中的顶点,由于其空间结构,该图是二分图。 将每个顶点的边链接到其所有邻域顶点。

证明:

如果我们把每个方 block 涂成白色或黑色,就可以形成没有两个黑色相邻,也没有两个白色相邻,所以图中的边只会在一黑一白之间。

算法:

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

关于algorithm - 双正方形最大堆积图算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14150729/

相关文章:

c# - C#/.NET 在不同场景下的最佳排序算法

Python绘制流程图、插图图

algorithm - 使用哈密尔顿循环函数和相反任务的哈密顿寻路

java - 根据步行速度在 2 个 GPS 位置之间进行插值

arrays - 按大小和频率对多个阵列的公共(public)共享子阵列进行排名的有效方法是什么?

jquery - 本地网站中的实时 CSS 半饼图

c - 在C中初始化图时如何分配内存?

math - 支配集贪婪逼近最坏情况示例

algorithm - 使用次优解决方案采访调度算法

c# - 将位图与自定义算法结合起来的更快方法?