判断二分图

Posted realzhaijiayu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了判断二分图相关的知识,希望对你有一定的参考价值。

技术图片

思路

染色问题,可以使用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;
            }
        }
    }
}



以上是关于判断二分图的主要内容,如果未能解决你的问题,请参考以下文章

判断二分图

二分图

二分图判断(交叉染色)

二分图

hdu2444二分图最大匹配+判断二分图

ACM模板判断二分图+二分图最大匹配