Graph Coloring and Bipartite Check
Advertisement
Bipartite Check — BFS 2-Coloring
Assign alternating colors (0/1) during BFS. If a neighbor has the same color → not bipartite.
Python
from collections import deque
def isBipartite(graph):
n = len(graph)
color = [-1]*n
for start in range(n):
if color[start] != -1: continue
q = deque([start])
color[start] = 0
while q:
u = q.popleft()
for v in graph[u]:
if color[v] == -1:
color[v] = 1 - color[u]
q.append(v)
elif color[v] == color[u]:
return False
return True
JavaScript
function isBipartite(graph) {
const n=graph.length, color=new Array(n).fill(-1);
for(let s=0;s<n;s++){
if(color[s]!==-1)continue;
const q=[s]; color[s]=0;
while(q.length){const u=q.shift();
for(const v of graph[u]){if(color[v]===-1){color[v]=1-color[u];q.push(v);}else if(color[v]===color[u])return false;}}
}
return true;
}
Java
import java.util.*;
public boolean isBipartite(int[][] graph) {
int n=graph.length; int[] color=new int[n]; Arrays.fill(color,-1);
for(int s=0;s<n;s++){
if(color[s]!=-1)continue;
Queue<Integer>q=new LinkedList<>();q.offer(s);color[s]=0;
while(!q.isEmpty()){int u=q.poll();for(int v:graph[u]){if(color[v]==-1){color[v]=1-color[u];q.offer(v);}else if(color[v]==color[u])return false;}}
}
return true;
}
C++
#include <vector>
#include <queue>
using namespace std;
bool isBipartite(vector<vector<int>>&g){
int n=g.size(); vector<int> c(n,-1);
for(int s=0;s<n;s++){
if(c[s]!=-1)continue;
queue<int>q;q.push(s);c[s]=0;
while(!q.empty()){int u=q.front();q.pop();for(int v:g[u]){if(c[v]==-1){c[v]=1-c[u];q.push(v);}else if(c[v]==c[u])return false;}}
}
return true;
}
C
int color[100001];
int bfs_bipartite(int adj[][100],int n){
memset(color,-1,sizeof(color));
for(int s=0;s<n;s++){
if(color[s]!=-1)continue;
int q[10001],lo=0,hi=0; q[hi++]=s; color[s]=0;
while(lo<hi){int u=q[lo++];for(int v=0;v<n;v++)if(adj[u][v]){if(color[v]==-1){color[v]=1-color[u];q[hi++]=v;}else if(color[v]==color[u])return 0;}}
}
return 1;
}
Advertisement