查看二分图的定义可知,每条边的顶点分别属于两个不同的集合。
因此可以采用染色法,对顶点所属的两个顶点染上不同的颜色。使用BFS遍历与每个顶点所连接的其他顶点,如果发现某个顶点两次染色的颜色不一致,则说明该图不是二分图。
class Solution {
public boolean isBipartite(int[][] graph) {
int[] color = new int[graph.length];
for(int i = 0; i<graph.length; i++){
if(color[i] != 0){
//已经被上色
continue;
}
LinkedList<Integer> q = new LinkedList<>();
q.offer(i);
color[i] = 1;
while(!q.isEmpty()){
int t = q.poll();
for(int j=0; j<graph[t].length; j++){
if(color[graph[t][j]] == 0){
q.offer(graph[t][j]);
color[graph[t][j]] = -color[t];
}else if(color[graph[t][j]]==color[t]){
return false;
}
}
}
}
return true;
}
}