1、算法思路
1.什么是二分图的最大匹配问题
这篇博客讲得非常清楚详细——资料来源
匹配:在图论中,一个「匹配」(matching)是一个边的集合,其中任意两条边都没有公共顶点。例如,图 3、图 4 中红色的边就是图 2 的匹配。
最大匹配:一个图所有匹配中,所含匹配边数最多的匹配,称为这个图的最大匹配。图 4 是一个最大匹配,它包含 4 条匹配边。
2. 使用方法
匈牙利算法。我们直接结合例题和代码来看吧,这里我使用的是DFS的方式进行求解。
3.小例子
对于这样一个二分图,我们来看一下他的最大匹配是多少。我们从左边的1开始,1与5相连,并且5没有匹配的边。所以1和5匹配。
再看2号节点。2号只有一个相连的节点5号,但是5号已经与1号相匹配了,我们就看看1号还有没有别的可以相连的点。然后我们看到了6号,6号没有被匹配,那么我们就让1号与6号匹配,这样2号就可以与5号匹配了。
再看3号,第一条与之相连的边6号已经与1号匹配了,我们就看看1号有没有别的相连的点呢?一看有个5号,可是5号点与2号点匹配了,我们就看看2号点有没有其他与之相连的边?结果没有。所以2号不能给1号让出5号,所以1号也不能给3号让出6号。
再看3号的第二条与之相连的边7号,还没有被匹配,所以可以与3号匹配。
再看4号点,第一条与之相连的点是7,但是7与3号点已经匹配了,那么再看看3号点能不能换一条边匹配呢?6号我们先前试过了,不行,那么只有8号了,而8号有没有被匹配,所以3号可以和8号匹配,将7号让给4号。
这样就找到了最大匹配。
4.时间复杂度
O ( N ∗ M ) O(N*M) O(N∗