给定一个无向图graph
,当这个图为二分图时返回true
graph将会以邻接表方式给出,graph[i]表示图中与节点i相连的所有节点。每个节点都是一个在0到graph.length-1之间的整数。这图中没有自环和平行边: graph[i] 中不存在i,并且graph[i]中没有重复的值。
def isBipartite(graph) -> bool:
n = len(graph)
record = [0] * n
def dfs(point, c):
record[point] = c
for i in graph[point]:
# 访问为-c的点直接跳过
if record[i] == -c:
continue
# 染色相同则不能为二分图
elif record[i] == c:
return False
# 对于没访问过的点染色
elif record[i] == 0 and not dfs(i, -c):
return False
return True
for i in range(n):
# 图不是连通的
if record[i] == 0 and not dfs(i, 1):
return False
return True
示例 1:
输入: [[1,3], [0,2], [1,3], [0,2]]
输出: true
解释:
无向图如下:
0----1
| |
| |
3----2
我们可以将节点分成两组: {0, 2} 和 {1, 3}。