Component Coloring

Color each connected component in a graph with different colors.

Implementation

Implement a function int componentColoring(vector<vector<int>> &G, vector<int> &color) where G is an adjacency list representation of the graph, color should be updated such that color[i] is the color index (starting from 0) of the component where ith node belongs, and the return value is the number of colors (i.e. components).

DFS

void dfs(vector<vector<int>> &G, int u, vector<int> &color, int k) {
    color[u] = k;
    for (int v : G[u]) {
        if (color[v] > -1) continue;
        dfs(G, v, color, k);
    }
}
int componentColoring(vector<vector<int>> &G, vector<int> &color) {
    int N = G.size(), k = 0;
    color.resize(N);
    fill(color.begin(), color.end(), -1);
    for (int i = 0; i < N; ++i) {
        if (color[i] > -1) continue;
        dfs(G, i, color, k++);
    }
    return k;
}

BFS

Union Find

Last updated

Was this helpful?