二分图判定与匹配

📌 核心概念

二分图:顶点可分为两个不相交集合,所有边的两个顶点分别属于不同集合。

判定方法:染色法(BFS/DFS) 最大匹配:匈牙利算法

🎯 经典应用

Go 代码

func isBipartite(graph [][]int) bool {
    n := len(graph)
    colors := make([]int, n)
    for i := range colors {
        colors[i] = -1
    }
 
    var dfs func(int, int) bool
    dfs = func(node, color int) bool {
        colors[node] = color
 
        for _, neighbor := range graph[node] {
            if colors[neighbor] == -1 {
                if !dfs(neighbor, 1-color) {
                    return false
                }
            } else if colors[neighbor] == color {
                return false
            }
        }
 
        return true
    }
 
    for i := 0; i < n; i++ {
        if colors[i] == -1 {
            if !dfs(i, 0) {
                return false
            }
        }
    }
 
    return true
}

🎯 经典题目

题目LeetCode方法
判断二分图785染色法
可能的二分法886染色法

返回:图算法