Hungarian Algorithm
Hungarian Algorithm Notes
二分图定义:一个图是二分图,当且仅当它不包含奇数长度的环。可以使用两种颜色(通常为黑和白)对二分图的顶点进行染色,使得任意一条边的两个端点的颜色不同。
最大匹配数:从图中选出尽可能多的边,使得每条边连接的两个顶点都只被选中一次,即选出最大匹配的边数(即对数)。
最小点覆盖数:选出尽可能少的顶点,使得每条边的两个顶点中至少有一个顶点被选中。
König 定理:二分图中,最大匹配数等于这个图中的最小点覆盖数。
实现匈牙利算法的具体代码
下面代码中,左部点可以理解为“男生”,右部点可以理解为“女生”。pr[y] 表示右部点 y 当前匹配的左部点编号。
1 | const int N = 509; |
求最大匹配数
1 | int match_count = 0; |
st 使用当前左部点编号即可,这样不需要每次清空 vis 数组。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Elian's blog page!