...

/

Solution: Print all Connected Components of a Graph

Solution: Print all Connected Components of a Graph

This review provides a detailed analysis of the solution to print all connected components of a graph.

Solution #1: Simple Depth First Traversal

Press + to interact
main.cpp
Graph.cpp
Graph.h
#include "Graph.h"
void Graph::utilityFunction(int v, vector <bool>& visited) {
visited[v] = true;
cout << v << " ";
list <int> ::iterator i;
for (i = adjacencyList[v].begin(); i != adjacencyList[v].end(); ++i)
if (!visited[ * i])
utilityFunction( * i, visited);
}
void Graph::printConnectedComponents() {
vector <bool> visited(this -> vertices, false);
for (int v = 0; v < this -> vertices; v++) {
if (visited[v] == false) {
utilityFunction(v, visited);
cout << endl;
}
}
}
int main() {
Graph g(7);
g.addEdge(0, 1);
g.addEdge(1, 2);
g.addEdge(3, 4);
g.addEdge(5, 3);
g.addEdge(5, 6);
g.addEdge(3, 6);
cout << "The connected components are:" << endl;
g.printConnectedComponents();
return 0;
}

We can solve this problem simply by iterating through the graph. Nothing too tricky going on here. We already made a visited array for DFS. Now, if in the end there are nodes that are still marked as unvisited, simply print the visited nodes and call the utility function again. Start traversal for these unvisited nodes, but keep in mind that now we are dealing with a different component of the same graph.

Time

...
Access this course and 1400+ top-rated courses and projects.