2 min read
https://www.geeksforgeeks.org/bipartite-graph/
Color the graph by BFS traversal, colors
maintains track of visited nodes.
colors[it] = 1 - colors[node]
is the fun alternator part
Using BFS
class Solution {
bool bfsHelper(int i, vector<int> &colors, vector<int> adj[]) {
queue<int> q;
colors[i] = 1;
q.push(i);
while (!q.empty()) {
int node = q.front();
q.pop();
for (int it : adj[node]) {
if (colors[it] == -1) {
colors[it] = 1 - colors[node];
q.push(it);
} else if (colors[it] == colors[node]) {
return false;
}
}
}
return true;
}
public:
bool isBipartite(int V, vector<int> adj[]) {
vector<int> colors(V, -1);
for (int i = 0; i < V; i++) {
if (colors[i] == -1) {
if (!bfsHelper(i, colors, adj))
return false;
}
}
return true;
}
};
Using DFS
class Solution {
bool dfsHelper(int i, vector<int> &colors, vector<int> adj[]) {
if (colors[i] == -1) {
colors[i] = 1;
}
for (int it : adj[i]) {
if (colors[it] == -1) {
colors[it] = 1 - colors[i];
if (!dfsHelper(it, colors, adj)) {
return false;
}
} else if (colors[it] == colors[i]) {
return false;
}
}
return true;
}
public:
bool isBipartite(int V, vector<int> adj[]) {
vector<int> colors(V, -1);
for (int i = 0; i < V; i++) {
if (colors[i] == -1) {
if (!dfsHelper(i, colors, adj))
return false;
}
}
return true;
}
};