Is Graph Bipartite? 07/30
Example
Example 1:
Input: [[1,3], [0,2], [1,3], [0,2]]
Output: true
Explanation:
The graph looks like this:
0----1
| |
| |
3----2
We can divide the vertices into two groups: {0, 2} and {1, 3}.Last updated
Example 1:
Input: [[1,3], [0,2], [1,3], [0,2]]
Output: true
Explanation:
The graph looks like this:
0----1
| |
| |
3----2
We can divide the vertices into two groups: {0, 2} and {1, 3}.Last updated
Example 2:
Input: [[1,2,3], [0,2], [0,1,3], [0,2]]
Output: false
Explanation:
The graph looks like this:
0----1
| \ |
| \ |
3----2
We cannot find a way to divide the set of nodes into two independent subsets.public class Solution {
/**
* @param graph: the given undirected graph
* @return: return true if and only if it is bipartite
*/
public boolean isBipartite(int[][] graph) {
// Write your code here
int[] colors = new int[graph.length];
Queue<Integer> queue = new LinkedList<>();
for (int i = 0; i < graph.length ;i++ ){
if(colors[i] != 0) continue;
colors[i] = 1;
queue.offer(i);
while(!queue.isEmpty()){
int t = queue.poll();
for(int j = 0; j < graph[t].length;j++){
if(colors[graph[t][j]] == 0){
colors[graph[t][j]] = -1* colors[t];
queue.offer(graph[t][j]);
}else{
if(colors[graph[t][j]] == colors[t]){
return false;
}
}
}
}
}
return true;
}
}