图论导引 P77 2.3.21 快速检测二分图

题目概述:设计一个快速的算法来检测一个图是否为二分图。
图可以以邻接矩阵的形式输入,也可以以顶点及其邻接表的形式输入。
算法对同一条边的考察不应重复两次以上。

首先整体思路应该从BFS的角度考虑。
任选一个点为源点(前提是无孤立点)做BFS,
每个点存储它到源点的距离。
因为二分图性质为无奇环,也就是从一个顶点到达同一个顶点的
两条路径权重奇偶性必须一样,那么基于此,
BFS队列里面的节点存储的本质是从源点出发到该节点的奇偶性,
因为如果该节点出现两种奇偶性路径那么肯定就形成环了不必继续判定。
具体操作暂时不以代码呈现,

vis数组肯定需要,存储从i到j的路径的奇偶性即可,用0和1表示。
每次按邻接矩阵条件扩展节点时,对vis数组进行更新,如果出现
违反奇偶性的情况则直接返回false;

上述是对于连通图的做法,
对于多个连通块(孤立点亦是如此)也是一样,
只要有一个连通块存在奇环, 整体不会构成二分图,
该算法每条边只要遍历一次。

猜你喜欢

转载自blog.csdn.net/qq_37451344/article/details/80781940