Graph Coloring and Bipartite Check

Sanjeev SharmaSanjeev Sharma
1 min read

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

Sanjeev Sharma

Written by

Sanjeev Sharma

Full Stack Engineer · E-mopro