leetcode 785. 判断二分图【BFS】

查看二分图的定义可知,每条边的顶点分别属于两个不同的集合。
因此可以采用染色法,对顶点所属的两个顶点染上不同的颜色。使用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;
    }
}

你可能感兴趣的:(刷题路漫漫)