Code:
package com.executecodes.graph;
import java.util.*;
public class StronglyConnectedGraph
{
private int V;
private int preCount;
private int[] low;
private boolean[] visited;
private List
private List
- > sccComp;
private Stack
/** function to get all strongly connected components **/
public List
- > getSCComponents(List
{
V = graph.length;
this.graph = graph;
low = new int[V];
visited = new boolean[V];
stack = new Stack
sccComp = new ArrayList<>();
for (int v = 0; v < V; v++)
if (!visited[v])
dfs(v);
return sccComp;
}
/** function dfs **/
public void dfs(int v)
{
low[v] = preCount++;
visited[v] = true;
stack.push(v);
int min = low[v];
for (int w : graph[v])
{
if (!visited[w])
dfs(w);
if (low[w] < min)
min = low[w];
}
if (min < low[v])
{
low[v] = min;
return;
}
List
int w;
do
{
w = stack.pop();
component.add(w);
low[w] = V;
}
while (w != v);
sccComp.add(component);
}
@SuppressWarnings("unchecked")
public static void main(String[] args)
{
Scanner scan = new Scanner(System.in);
System.out.println("Enter number of Vertices");
/** number of vertices **/
int V = scan.nextInt();
/** make graph **/
List
for (int i = 0; i < V; i++)
g[i] = new ArrayList
/** accept all edges **/
System.out.println("Enter number of edges");
int E = scan.nextInt();
/** all edges **/
System.out.println("Enter the edges in the graph :
for (int i = 0; i < E; i++)
{
int x = scan.nextInt();
int y = scan.nextInt();
g[x].add(y);
}
StronglyConnectedGraph t = new StronglyConnectedGraph();
System.out.print("The graph is strongly connected? : ");
/** print all strongly connected components **/
List
- > scComponents = t.getSCComponents(g);
Iterator
- > iterator = scComponents.iterator();
boolean stronglyConnected = true;
while (iterator.hasNext())
{
if (iterator.next().size() <= 1)
{
stronglyConnected = false;
}
}
System.out.println(stronglyConnected);
scan.close();
}
}
Output:
Enter number of Vertices
6
Enter number of edges
7
Enter the edges in the graph :
0 1
1 2
1 3
3 4
4 5
5 3
5 2
The graph is strongly connected? : false
Enter number of Vertices
8
Enter number of edges
14
Enter the edges in the graph :
0 1
1 2
2 3
3 2
3 7
7 3
2 6
7 6
5 6
6 5
1 5
4 5
4 0
1 4
The graph is strongly connected? : true
More Java Programs: