Skip to content

Commit bd52a29

Browse files
Merge pull request #17 from PrajwalAdsul/master
added strongly connected components for graph
2 parents 1fffb94 + 1328f4a commit bd52a29

File tree

1 file changed

+90
-0
lines changed

1 file changed

+90
-0
lines changed
Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
// Strongly connected components of graph
2+
#include<bits/stdc++.h>
3+
using namespace std;
4+
void addEdge(vector<pair<int, int>> adj[], int u, int v, int w){
5+
adj[u].push_back({v, w});
6+
}
7+
void dfsrec(vector<pair<int, int>> adj[], int V, int u, vector<bool> &visited){
8+
visited[u] = true;
9+
for(auto x : adj[u]){
10+
if(!visited[x.first])
11+
dfsrec(adj, V, x.first, visited);
12+
}
13+
cout << u << " ";
14+
}
15+
void dfs(vector<pair<int, int>> adj[], int V){
16+
vector<bool> visited(V, false);
17+
if(V <= 0)
18+
return;
19+
cout << endl;
20+
for(int i = 0; i < V; i++){
21+
if(!visited[i]){
22+
dfsrec(adj, V, i, visited);
23+
}
24+
}
25+
cout << endl;
26+
}
27+
void indegree(vector<pair<int, int>> adj[], int V, vector<int> &indeg){
28+
for(int i = 0; i < V; i++){
29+
for(auto x : adj[i]){
30+
indeg[x.first]++;
31+
}
32+
}
33+
}
34+
void dfsrec(vector<pair<int, int>> adj[], int u, stack<int> &s, vector<bool> &visited){
35+
for(auto x : adj[u]){
36+
if(!visited[x.first])
37+
{
38+
visited[x.first] = true;
39+
dfsrec(adj, x.first, s, visited);
40+
}
41+
}
42+
s.push(u);
43+
}
44+
void rev(vector<pair<int, int>> adj[], vector<pair<int, int>> adjrev[], int V){
45+
for(int i = 0; i < V; i++){
46+
for(auto x : adj[i]){
47+
adjrev[x.first].push_back({i, 0});
48+
}
49+
}
50+
}
51+
int scc(vector<pair<int, int>> adj[], int V){
52+
stack<int> s;
53+
vector<bool> visited(V, false);
54+
for(int i = 0; i < V; i++){
55+
if(!visited[i]){
56+
visited[i] = true;
57+
dfsrec(adj, i, s, visited);
58+
}
59+
}
60+
//show(s);
61+
int c = 0;
62+
vector<pair<int, int>> adjrev[V];
63+
rev(adj, adjrev, V);
64+
vector<bool> visitedd(V, false);
65+
cout << "Strongly connected components are\n";
66+
while(!s.empty()){
67+
int u = s.top();
68+
s.pop();
69+
if(!visitedd[u]){
70+
dfsrec(adjrev, V, u, visitedd);
71+
cout << endl;
72+
c++;
73+
}
74+
}
75+
return c;
76+
}
77+
int main(){
78+
int V = 6;
79+
vector<pair<int, int>> adj[V];
80+
addEdge(adj, 0, 1, 10);
81+
addEdge(adj, 4, 2, 10);
82+
addEdge(adj, 4, 5, 30);
83+
addEdge(adj, 3, 4, 90);
84+
addEdge(adj, 2, 1, 10);
85+
addEdge(adj, 3, 5, 30);
86+
addEdge(adj, 1, 4, 90);
87+
addEdge(adj, 4, 0, 100);
88+
scc(adj, V);
89+
return 0;
90+
}

0 commit comments

Comments
 (0)