【Breadth-first Search 】785. Is Graph Bipartite?

输入:一个无向图graph。graph[i] 的值是一些节点,表示从i到这些节点有边。图中节点用0到graph.length-1表示。这个图没有指向自己的边,也就是说节点i不会有指向节点i的边。输入中不会有重复的边。
输出:如果这个图是bipartite,返回true;否则返回false。
规则:图bipartite的定义是:图中所有节点分成A、B两个集合,并且每一条边的两个节点分别属于两个集合。
分析:我们可以一边遍历边,一边将边的两个节点分别放入到两个集合中 setA setB。如果在遍历某条边的时候发现两个节点已经处在同一个集合中了,那就返回false。这到题目的BFS还是DFS是指 边的遍历方式。
细节:节点分成两个集合,可以用两个Set表示。也可以用一个数组不同的值表示(从934. Shortest Bridge学习到)。
代码

方法isBipartite 是BFS,两个Set
方法isBipartiteV2 是BFS,用colors数组既可以表示节点是否访问过,也可以表示节点的分组。
方法isBipartiteV3是BFS,V2版本的if else 判断优点low。colors[i]=0 表示一组,colors[i]=1表示另外一组
方法isBipartiteV4是DFS。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值