void BFS(vector<vector<int>>&adj,int node,vector<int>&colors){
queue<int>q;
int blue=1;
int red=2;
q.push(node);
colors[node]=blue;
while(!q.empty()){
int x=q.front();
q.pop();
for(int y:adj[x]){
if(!colors[y]){
q.push(y);
colors[y]=(colors[x]==blue)?red:blue;
}
}
}
}
bool isBipartite(vector<vector<int>>& graph) {
int n=graph.size();
vector<int>colors(n,0);
for(int i=0;i<n;i++){
if(!colors[i])BFS(graph,i,colors);
}
for(int i=0;i<n;i++){
for(int x:graph[i]){
if(colors[i]==colors[x])return false;
}
}
return true;
}
No comments:
Post a Comment