判断二分图
思路
染色问题,可以使用dfs,也可以使用bfs
代码
class Solution {
boolean valid = true;
int[][] graph;
public boolean isBipartite(int[][] graph) {
this.graph = graph;
int n = graph.length;
int[] nodes = new int[n];
for(int i = 0; i < n && valid; i++){
//对每一个为着色的结点进行着色
if(nodes[i] == 0){
dfs(i, nodes, 1);
}
}
return valid;
}
public void dfs( int index, int[] nodes, int color){
nodes[index] = color;
for(int neighbor : graph[index]){
//如果邻居结点未被着色,对其着色
if(nodes[neighbor] == 0){
dfs( neighbor, nodes, -color);
if(!valid){
return;
}
}
//如果邻居结点已经着色,但是和该结点颜色相同,不合法
else if(nodes[neighbor] == color){
valid = false;
return;
}
}
}
}