题目
There is an undirected graph with n nodes, where each node is numbered between 0 and n - 1. You are given a 2D array graph, where graph[u] is an array of nodes that node u is adjacent to. More formally, for each v in graph[u], there is an undirected edge between node u and node v. The graph has the following properties:
- There are no self-edges (graph[u] does not contain u).
- There are no parallel edges (graph[u] does not contain duplicate values).
- If v is in graph[u], then u is in graph[v] (the graph is undirected).
- The graph may not be connected, meaning there may be two nodes u and v such that there is no path between them.
A graph is bipartite if the nodes can be partitioned into two independent sets A and B such that every edge in the graph connects a node in set A and a node in set B.
Return true if and only if it is bipartite.
思路: 判断是够可以转化为二分图可以转化为,为每一条边的节点进行涂色,一条边两个颜色不同,如果存在矛盾说明不可以转化为二分图,全部节点遍历,没有矛盾证明可以转化为二分图。
class Solution {
public:
bool isBipartite(vector<vector<int>>& graph) {
int len = graph.size();
vector<int>color(graph.size(),0);
for(int i = 0; i < len; i++){
if(color[i] == 0 && !dfs(graph, color, i, 1))return false;
}
return true;
}
bool dfs(vector<vector<int>>graph, vector<int>&color, int cur, int colors){
color[cur] = colors;
for(int next:graph[cur]){
if(color[next] == colors) return false;
if(color[next] == 0 && !dfs(graph, color, next, -colors))
return false;
}
return true;
}
};