二分图
二分图是图论中的一种特殊模型。 设G=(V,E)是一个无向图,如果顶点V可分割为两个互不相交的子集(A,B),并且图中的每条边(i,j)所关联的两个顶点 i 和 j 分别属于这两个不同的顶点集(i in A,j in B),则称图G为一个二分图。
如下图所示,区别一个图是否是二分图的关键在于,它的点集是否可以被分成两个独立的点集。
左图为一个二分图,右图不是一个二分图。
二分图的最大匹配
二分图G=(V,E)中边的子集M,如果M中任意两条边,都不存在公共顶点,那么称M为该二分图的一个匹配。边数最多的匹配M称为二分图的最大匹配,也叫完美匹配。
如图所示,蓝色的边就是该二分图的一个匹配,并且这个二分图不存在数量多于三条的匹配M',所以这个匹配是该二分图的一个最大匹配。
二分图的最大匹配算法
算法描述
左顶点记为a,右顶点记为b,给定一个匹配M
step1:将a中不与M关联的顶点做标记(※),程序中用数组A表示,A=“0”:未标记,A=“1”:标记为(※),A=“2”:标记并处理
step2:如果在上一步中没有新的标记点标记到a上(即数组A中不存在“1”),则算法结束,否则进入step3
step3:如果a中有被标记但未被处理的点a[x](即数组A[x]=“1”),将其标记为已处理(即A[x]</