剑指 Offer II 106. 二分图

2022-08-12  本文已影响0人  邦_
截屏2022-08-11 17.04.40.png

这道题主要是读懂题意= =。。
数组 graph = [[1,2,3],[0,2],[0,1,3],[0,2]]
第0个节点 和1,2,3都有一条无向边
第1个节点 和0,2都有一条无向边
第2个节点 和0,1,3都有一条无向边
第3个节点 和0,2都有一条无向边

这个dfs比较绕


func isBipartite(_ graph: [[Int]]) -> Bool {
        let len = graph.count
        var colorArray = Array.init(repeating: 0, count: len)
        var isClose = false
        
        for node in 0..<len {
            if colorArray[node] == 0 {
                dfs(node,graph,1,&isClose,&colorArray)
            }
            //说明发现了相邻的颜色相同的。直接返回false
            if isClose {
                return false
            }
            
        }
        
    
        return true
    }
    
    func dfs(_ node:Int, _ graph: [[Int]],_ color:Int,_ isClose:inout Bool,_ colorArray: inout [Int]){

        if isClose {
            return
        }
        colorArray[node] = color
        let nextColor = color == 1 ? 2 : 1
        let arr = graph[node]
        for nextNode in arr {
            if colorArray[nextNode] == 0 {
                dfs(nextNode, graph, nextColor, &isClose, &colorArray)

            }
            else if colorArray[nextNode] == color {
                isClose = true
                return
            }
        }
        
    }




上一篇下一篇

猜你喜欢

热点阅读