【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。

你可能感兴趣的:(leetcode-java)