

- Trending Categories
Data Structure
Networking
RDBMS
Operating System
Java
iOS
HTML
CSS
Android
Python
C Programming
C++
C#
MongoDB
MySQL
Javascript
PHP
- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who
C++ Program to Find Strongly Connected Components in Graphs
Weakly or Strongly Connected for a given a directed graph can be found out using DFS. This is a C++ program of this problem.
Functions used
Begin Function fillorder() = fill stack with all the vertices. a) Mark the current node as visited and print it b) Recur for all the vertices adjacent to this vertex c) All vertices reachable from v are processed by now, push v to Stack End Begin Function DFS() : a) Mark the current node as visited and print it b) Recur for all the vertices adjacent to this vertex End
Example
#include <iostream> #include <list> #include <stack> using namespace std; class G { int m; list<int> *adj; //declaration of functions void fillOrder(int n, bool visited[], stack<int> &Stack); void DFS(int n, bool visited[]); public: G(int N); //constructor void addEd(int v, int w); int print(); G getTranspose(); }; G::G(int m) { this->m = m; adj = new list<int> [m]; } void G::DFS(int n, bool visited[]) { visited[n] = true; // Mark the current node as visited and print it cout << n << " "; list<int>::iterator i; //Recur for all the vertices adjacent to this vertex for (i = adj[n].begin(); i != adj[n].end(); ++i) if (!visited[*i]) DFS(*i, visited); } G G::getTranspose() { G g(m); for (int n = 0; n< m; n++) { list<int>::iterator i; for (i = adj[n].begin(); i != adj[n].end(); ++i) { g.adj[*i].push_back(n); } } return g; } void G::addEd(int v, int w) { adj[v].push_back(w); //add w to v's list } void G::fillOrder(int v, bool visited[], stack<int> &Stack) { visited[v] = true; //Mark the current node as visited and print it list<int>::iterator i; //Recur for all the vertices adjacent to this vertex for (i = adj[v].begin(); i != adj[v].end(); ++i) if (!visited[*i]) fillOrder(*i, visited, Stack); Stack.push(v); } int G::print() { //print the solution stack<int> Stack; bool *visited = new bool[m]; for (int i = 0; i < m; i++) visited[i] = false; for (int i = 0; i < m; i++) if (visited[i] == false) fillOrder(i, visited, Stack); G graph= getTranspose(); //Create a reversed graph for (int i = 0; i < m; i++)//Mark all the vertices as not visited visited[i] = false; int count = 0; //now process all vertices in order defined by Stack while (Stack.empty() == false) { int v = Stack.top(); Stack.pop(); //pop vertex from stack if (visited[v] == false) { graph.DFS(v, visited); cout << endl; } count++; } return count; } int main() { G g(5); g.addEd(2, 1); g.addEd(3, 2); g.addEd(1, 0); g.addEd(0, 3); g.addEd(3, 1); cout << "Following are strongly connected components in given graph \n"; if (g.print() > 1) { cout << "Graph is weakly connected."; } else { cout << "Graph is strongly connected."; } return 0; }
Output
Following are strongly connected components in given graph 4 0 1 2 3 Graph is weakly connected.
- Related Questions & Answers
- Strongly Connected Graphs
- Tarjan's Algorithm for Strongly Connected Components
- C++ Program to Find the Connected Components of an UnDirected Graph
- C++ Program to Check Whether it is Weakly Connected or Strongly Connected for a Directed Graph
- C++ Program to Check Whether a Graph is Strongly Connected or Not
- Connected vs Disconnected Graphs
- Python Program to Find All Connected Components using BFS in an Undirected Graph
- Python Program to Find All Connected Components using DFS in an Undirected Graph
- Check if a given directed graph is strongly connected in C++
- Number of Connected Components in an Undirected Graph in C++
- C++ Program to Find Chromatic Index of Cyclic Graphs
- Check if a graph is strongly connected - Set 1 (Kosaraju using DFS) in C++
- C++ Program to find number of working components
- C++ program to find out the maximum sum of a minimally connected graph
- C++ Program to Find SSSP (Single Source Shortest Path) in DAG (Directed Acyclic Graphs)
Advertisements