【数据结构】二分图

二分图

只使用两种颜色,将图的顶点染色,如果能保证每个相连的顶点颜色不同的话,这个图则是二分图。
在这里插入图片描述
在这里插入图片描述

二分图的判断

在这里插入图片描述

import java.util.Scanner;

public class Main {
    static Scanner in = new Scanner(System.in);
    static int V = 3;//顶点数
    static int[] colors;//顶点颜色,充当记忆化数组,减少递归
    static int map[][];//邻接表

    public static void main(String[] args) {
        map = new int[V][V];
        colors = new int[V];
        //用例用的第一个图的
        map = new int[][]{{0, 1, 1}, {1, 0, 1}, {1, 1, 0}};
        solve();
    }

    public static void solve() {
        for (int i = 0; i < V; i++) {
            if (colors[i] == 0) {
                if (!dfs(i, 1)) {
                    System.out.println("NO");
                    return;
                }
            }
        }
        System.out.println("YES");
    }

    private static boolean dfs(int v, int c) {
        colors[v] = c;
        for (int i = 0; i < V; i++) {
            //顶点不相连
            if (map[v][i] == 0) continue;
            //两定点同色
            if (colors[i] == c) return false;
            //相邻顶点未染色,递归将其染另一个色
            if (colors[i] == 0 && !dfs(i, -c)) {
                return false;
            }
        }
        return true;
    }
}

猜你喜欢

转载自blog.csdn.net/HuaLingPiaoXue/article/details/88833122