思路,枚举点BFS+层级染色:
class Solution {
public:
bool possibleBipartition(int N, vector<vector<int>>& dislikes) {
vector<int> color(N+1);
vector<vector<int>> Edge(N+1,vector<int>(0));
for(int i=0;i<dislikes.size();i++){
int a = dislikes[i][0];
int b = dislikes[i][1];
Edge[a].push_back(b);
Edge[b].push_back(a);
}
queue<int> q;
for(int k=1;k<=N;k++){
if(color[k] != 0) continue;
q.push(k);
color[k] = 1;
while(!q.empty()){
int now = q.front();
q.pop();
for(int i=0;i<Edge[now].size();i++){
int next = Edge[now][i];
if(color[next] == 0){
q.push(next);
color[next] = color[now]+1;
}else{
for(int j=0;j<Edge[next].size();j++){
int near = Edge[next][j];
if(color[near] == 0) continue;
if( (color[near] + color[next])%2 == 0 ) return false;
}
}
}
}
}
return true;
}
};
本文介绍了一种使用广度优先搜索(BFS)结合层级染色策略来判断一个图是否可以被二分的方法。通过构建邻接矩阵,对每个未着色的节点进行BFS遍历,并尝试将其染为两种颜色之一,确保相邻节点颜色不同。如果过程中发现冲突,则该图不能被二分。
2203

被折叠的 条评论
为什么被折叠?



