1、什么是二分图?

在一张图中,如果能够把全部的点分到两个集合中,保证两个集合内部没有任何边,图中的边 只存在于两个集合之间,这张图就是二分图。

2、二分图常用算法有哪些呢?

2.1、染色法(判断一个图是否为二分图)

算法原理就是,用黑与白 这两种颜色对图中点染色(相当于给点归属一个集合),一个点显然不能同时具有两种颜色,若有,此图就不是二分图。

2.2、匈牙利算法(求出二分图的最大匹配数)

所谓“最大匹配数”的意思就是:两个集合分别选一个点,这两个点之间有边就确认一段关系(一个集合中的两点占有另一集合中同一个点 是不合法的),最多的关系数量就是这张二分图的最大匹配。

最坏情况会每个点遍历全部边一次,所以时间复杂度是$O(nm)$,但匈牙利算法还是很优秀的,大部分情况时间都比较小。