染色问题的解题思路,染色问题

涉及到的题目:

886. 可能的二分法

785. 判断二分图

https://blog.csdn.net/qq_21201267/article/details/105294270

此类题目的关键在于构建图,然后将一条边上两个点着不同的颜色,当着色方案为2种颜色时,即为所说的二分图问题。

886. 可能的二分法

class Solution: def possibleBipartition(self, N: int, dislikes: List[List[int]]) -> bool: color = {} graph = collections.defaultdict(set) for i,j in dislikes: graph[i].add(j) graph[j].add(i) def dfs(i): nei = graph[i] for j in nei: if j not in color: color[j] = color[i] ^ 1 if not dfs(j): return False elif color[j] == color[i]: return False return True for i in range(1,N+1): if i not in color: color[i] = 0 if not dfs(i): return False return True 785. 判断二分图

DFS版本:

class Solution(object): def isBipartite(self, graph): “”” :type graph: List[List[int]] :rtype: bool “”” n = len(graph) visited = [-1] * n for i in range(n): if visited[i] == -1: if not self.dfs(graph, i, 0, visited): return False return True def dfs(self, graph, v, color, visited): visited[v] = color for i in graph[v]: if visited[i] == -1: if not self.dfs(graph, i, 1 – color, visited): return False elif visited[i] == color: return False return True

BFS版本:

class Solution(object): def isBipartite(self, graph): n = len(graph) visited = [-1] * n for i in range(n): if visited[i] == -1: if not self.bfs(graph, i, 0, visited): return False return True def bfs(self, graph, v, color, visited): visited[v], queue = color, [v] while queue: node = queue.pop(0) for i in graph[node]: if visited[i] == -1: visited[i] = 1 – visited[node] queue.append(i) elif visited[i] == visited[node]: return False return True

 

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注