判断二分图


思路

染色问题,可以使用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;
            }
        }
    }
}
posted @ 2020-07-16 19:22  zjy4fun  阅读(130)  评论(0编辑  收藏  举报