【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>
概述
在二分图中寻找最大匹配数的算法(如对二分图不熟悉,可以看下笔者的另一篇文章二分图/二部图检测(动图&代码实现)),即对一侧的每一个尚未匹配的顶点,不断寻找可以增广的交替路
- 交替路: 匹配边和非匹配边交替出现
- 增广路径: 从一侧的非匹配点终止于另一个非匹配点
匈牙利算法
思路
- 从左侧的一个非匹配点出发
- 从右向左的边,永远走匹配边
- 终止于另一个非匹配点,则有增广路径,最大匹配数加1 补充:左侧和右侧只是一种说法,等价于一侧和另一侧
二分图寻找最大匹配数
下图是一个二分图,将会通过给这个图寻找最大匹配数,来描述匈牙利算法寻找增广交替路的思路 补充:匹配后的点置为红色,匹配边也置为红色
- 从顶点0出发,到达顶点4,此时顶点0和顶点4都是非匹配点,则找到一条增广交替路,最大匹配数为1
- 从顶点1出发,从右->左的边只走匹配边,所以走1->4->0,此时来到顶点0,还可以走到顶点6,顶点6又是一个非匹配点,则找到一条增广的交替路,将该交替路中的匹配路变为非匹配路,非匹配路变为匹配路,并将顶点1和顶点6置为匹配点
- 此时的最大匹配数为2
- 从顶点2出发,依次走过:2->6->0->4->1->5,找到一条新的增广交替路,再进行一次变换,并将顶点2和顶点3置为匹配点
- 此时的最大匹配数为3
- 至此,所有的顶点都匹配到了,最大匹配数为3
来源:oschina
链接:https://my.oschina.net/HaverLee/blog/3142499