785.Is Graph Bipartite?
Given an undirected graph
, return true
if and only if it is bipartite.
Recall that a graph is bipartite if we can split it's set of nodes into two independent subsets A and B such that every edge in the graph has one node in A and another node in B.
The graph is given in the following form: graph[i]
is a list of indexes j
for which the edge between nodes i
and j
exists. Each node is an integer between 0
and graph.length - 1
. There are no self edges or parallel edges: graph[i]
does not contain i
, and it doesn't contain any element twice.
Example 1: Input: [[1,3], [0,2], [1,3], [0,2]] Output: true Explanation: The graph looks like this: 0----1 | | | | 3----2 We can divide the vertices into two groups: {0, 2} and {1, 3}.
Example 2: Input: [[1,2,3], [0,2], [0,1,3], [0,2]] Output: false Explanation: The graph looks like this: 0----1 | \ | | \ | 3----2 We cannot find a way to divide the set of nodes into two independent subsets.
Note:
graph
will have length in range[1, 100]
.graph[i]
will contain integers in range[0, graph.length - 1]
.graph[i]
will not containi
or duplicate values.- The graph is undirected: if any element
j
is ingraph[i]
, theni
will be ingraph[j]
.
判断一个图是否是二分图。这题给出了二分图的定义:即图上的顶点可以被分为互相独立的两簇,图上每条的两个顶点分别在这两簇中。做法可以是模拟这个定义,对图上每条边的顶点进行着色。如果图上每条边的顶点都能不冲突的着上两个色。则可以是二分图,解法可以是BFS也可以是DFS,下面给出DFS的解法:
class Solution(object): def isBipartite(self, graph): """ :type graph: List[List[int]] :rtype: bool """ colorset = [-1] * len(graph)
#防止图不连通,所以要多次出发。 for i in xrange(len(graph)): if colorset[i] == -1 and not self.validcolor(graph, i, colorset, 0): return False return True def validcolor(self, graph, node, colorset, color): colorset[node] = color newcolor = 1 - color for n in graph[node]: if colorset[n] == -1 and not self.validcolor(graph, n, colorset, newcolor): return False elif colorset[n] != newcolor: return False return True
参考解法链接:https://leetcode.com/problems/is-graph-bipartite/discuss/115487/Java-Clean-DFS-solution-with-Explanation
posted on 2018-10-04 15:26 Sheryl Wang 阅读(121) 评论(0) 编辑 收藏 举报