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

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

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

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

上述是对于连通图的做法,
对于多个连通块(孤立点亦是如此)也是一样,
只要有一个连通块存在奇环, 整体不会构成二分图,
该算法每条边只要遍历一次。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值