一、二分图匹配
图匹配里面最特殊的一种就是二分图匹配,当然,也是算法最简单的一种。
所谓二分图,用最通俗的说法,就是图的顶点恰好可以分成两个集合,同一个集合内的顶点间不允许有边,处在不同集合的顶点允许有边相连。
而二分图匹配,指的是,从整个二分图中选出若干条边,图中的任意一个顶点(对于一个顶点,可能有许多条以该顶点为端点的边,每一条边都为该顶点的连边)至多有一条连边被选取。而边的选取过程,实质上是给顶点进行配对(选取一条边,边的两个端点即完成了配对),因此我们称这个过程为二分图匹配。
说到这里,我们肯定会有一个疑问,如何配对才能得到更多的边?我们称这个求边数最大的问题为最大二分图匹配问题。
1、匈牙利算法
对于最大二分图匹配问题,最基础,代码量最小的算法是匈牙利算法。
在学习匈牙利算法之前,我们先来思考一下一种情况:假如一个二分图当前已经进行了匹配(不是最大匹配),在该二分图中,仍然存在两个未进行匹配但是存在连通路径(路径可以由一条或多条边组成)的点,且在该连通路径上