Is Graph Bipartite?
第21天。
今天的题目是 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.
1 | Example 1: |
Note:
graphwill have length in range[1, 100].graph[i]will contain integers in range[0, graph.length - 1].graph[i]will not containior duplicate values.- The graph is undirected: if any element
jis ingraph[i], theniwill be ingraph[j].
这是一道关于图的问题,题目的意思很简单,就是要判断一个图是不是一个二部图,所谓的二部图,就是一个图可以把所有节点划分到两个不相交的两个集合,这两个集合内部没有边相连。
我们可以对图进行一次遍历,遍历的时候对节点进行着色,着色的规律是这样的,当从一个节点跳到另一个节点的时候,我们就切换一次颜色(共有三种颜色,其中一种表示没有访问,即白色)。因为遍历完了之后,整个图的节点就被划分成两部分了,接下来我们只需要判断所有节点的邻居是否和它是不同色的即可。代码如下:
1 | char color; |