leetcode medium 是否二分?

参考链接:https://www.cnblogs.com/grandyang/p/10317141.html
 

#### 版本一  递归
class Solution(object):
    # cur为index,color表示这个节点被染的色
    def helper(self, g, cur, color, colors):
        colors[cur] = color
        for i in range(len(g)):
            if g[cur][i] == 1:  # g[][]==1呀,那就是你俩dislike啊
                if colors[i] == color: # 如果dislike的这个节点还染了一样的色,那就直接False额
                    return False
                # colors[i] == 0 表示这个节点还没被染色,那就尝试染成-color试试?
                if colors[i] == 0 and not self.helper(g, i, -color, colors):
                    return False
        return True

    def possibleBipartition(self, n, dislike):
        g = [[0]*(n+1) for i in range(n+1)]
        for i in range(len(dislike)):
            g[dislike[i][0]][dislike[i][1]] = 1
            g[dislike[i][1]][dislike[i][0]] = 1
        colors = [0]*(n+1)
        for i in range(n):
            # colors[i] == 0 表示这个节点还没被染色,没被分组
            # self.helper(g, i, 1, colors) 中的1表示我用1去染这个节点
            if colors[i] == 0 and not self.helper(g, i, 1, colors):
                return False
        return True




### 版本2 使用BFS
class Solution(object):
    def possibleBipartition1(self, n, dislike):
        g = [[] for i in range(n+1)]
        # 把会dislike的都强行拆开了
        for i in range(len(dislike)):
            g[dislike[i][0]].append(dislike[i][1])
            g[dislike[i][1]].append(dislike[i][0])
        colors = [0]*(n+1)
        for i in range(n):
            if colors[i] != 0:  # 染色了已经
                # 染色了的就不管了,我只关心没染色的,并对它进行BFS
                continue
            colors[i] = 1
            queue = []  # 所以这个queue也是在每一次循环内建立的,进行当前点的BFS遍历
            queue.append(i)
            while queue:
                t = queue.pop(0)
                for j in g[t]:
                    if colors[j] == colors[t]: # 啥已经是相同的颜色了,好吧那直接False
                        return False
                    if colors[j] == 0:  # 还没染色呢那快染成不一样的...
                        colors[j] = -colors[t]
                        queue.append(j) # 好了这个点可以放到队列里去,表示遍历到了已经
        return True

秋招攒人品!!!~~~

你可能感兴趣的:(算法,BFS,算法)