785.Is Graph Bipartite?
阿新 • • 發佈:2018-10-04
directed nta problems cal color nod -- output span is a list of indexes
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]
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
785.Is Graph Bipartite?