一.题目:
判断一个无向图是不是二分图。二分图的定义是,可以把一个图划分成两部分,使得图中每条边的两个顶点分别来自这两部分。
二.解题思路:
参考这位的做法 负雪明烛,逐个遍历图上的节点,同时判断节点和其相邻的节点是否属于同一类别.
代码如下:
class Solution(object):
def isBipartite(self, graph):
"""
:type graph: List[List[int]]
:rtype: bool
"""
#0表示未访问,1表示第一种类别,2表示第二种类别
visited = [0] * len(graph)
for i in range(len(graph)):
if graph[i] and visited[i] == 0:
visited[i] = 1
q = collections.deque()
q.append(i)
while q:
v = q.popleft()#every point
for e in graph[v]:#every edge
if visited[e] != 0:
if visited[e] == visited[v]:
return False
else:
visited[e] = 3 - visited[v]
q.append(e)
return True