Skip to content

Commit 3cae796

Browse files
authored
Create scc_kosaraju.py
1 parent dc5c576 commit 3cae796

File tree

1 file changed

+45
-0
lines changed

1 file changed

+45
-0
lines changed

Graphs/scc_kosaraju.py

+45
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
# n - no of nodes, m - no of edges
2+
n, m = list(map(int,input().split()))
3+
4+
g = [[] for i in range(n)] #graph
5+
r = [[] for i in range(n)] #reversed graph
6+
# input graph data (edges)
7+
for i in range(m):
8+
u, v = list(map(int,input().split()))
9+
g[u].append(v)
10+
r[v].append(u)
11+
12+
stack = []
13+
visit = [False]*n
14+
scc = []
15+
component = []
16+
17+
def dfs(u):
18+
global g, r, scc, component, visit, stack
19+
if visit[u]: return
20+
visit[u] = True
21+
for v in g[u]:
22+
dfs(v)
23+
stack.append(u)
24+
25+
def dfs2(u):
26+
global g, r, scc, component, visit, stack
27+
if visit[u]: return
28+
visit[u] = True
29+
component.append(u)
30+
for v in r[u]:
31+
dfs2(v)
32+
33+
def kosaraju():
34+
global g, r, scc, component, visit, stack
35+
for i in range(n):
36+
dfs(i)
37+
visit = [False]*n
38+
for i in stack[::-1]:
39+
if visit[i]: continue
40+
component = []
41+
dfs2(i)
42+
scc.append(component)
43+
return scc
44+
45+
print(kosaraju())

0 commit comments

Comments
 (0)