package com.interview.algorithms.graph;
import java.util.HashSet;
import java.util.Set;
import com.interview.basics.model.graph.Graph;
import com.interview.basics.model.graph.searcher.ProblemSolver;
public abstract class C6_8_BiPartiteGraph extends ProblemSolver {
protected boolean[] flags;
public C6_8_BiPartiteGraph(Graph g){
super(g);
flags = new boolean[g.V];
}
public boolean isBiPartite(){
for(int w = 0; w < g.V; w++){
if(g.adj[w] != null){
for(int v : g.adj[w]){
if(flags[w] == flags[v])
return false;
}
}
}
return true;
}
public Set<Integer>[] getBiPartite(){
@SuppressWarnings("unchecked")
Set<Integer>[] partition = (Set<Integer>[]) new Set[2];
for(int i = 0; i < g.V; i++){
int index = flags[i]? 1: 0;
Set<Integer> set = partition[index];
if(set == null){
set = new HashSet<Integer>();
partition[index] = set;
}
set.add(i);
}
return partition;
}
@Override
public void preProcess(int v) {
}
@Override
public void postProcess(int v) {
// TODO Auto-generated method stub
}
}