This is a Java Program to Implement Tarjan Algorithm. Tarjan Algorithm is used for finding all strongly connected components in a graph.
Here is the source code of the Java Program to Implement Tarjan Algorithm. The Java program is successfully compiled and run on a Windows system. The program output is also shown below.
/**
* Java Program to Implement Tarjan Algorithm
**/
import java.util.*;
/** class Tarjan **/
class Tarjan
{
/** number of vertices **/
private int V;
/** preorder number counter **/
private int preCount;
/** low number of v **/
private int[] low;
/** to check if v is visited **/
private boolean[] visited;
/** to store given graph **/
private List<Integer>[] graph;
/** to store all scc **/
private List<List<Integer>> sccComp;
private Stack<Integer> stack;
/** function to get all strongly connected components **/
public List<List<Integer>> getSCComponents(List<Integer>[] graph)
{
V = graph.length;
this.graph = graph;
low = new int[V];
visited = new boolean[V];
stack = new Stack<Integer>();
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<Integer> component = new ArrayList<Integer>();
int w;
do
{
w = stack.pop();
component.add(w);
low[w] = V;
} while (w != v);
sccComp.add(component);
}
/** main **/
public static void main(String[] args)
{
Scanner scan = new Scanner(System.in);
System.out.println("Tarjan algorithm Test\n");
System.out.println("Enter number of Vertices");
/** number of vertices **/
int V = scan.nextInt();
/** make graph **/
List<Integer>[] g = new List[V];
for (int i = 0; i < V; i++)
g[i] = new ArrayList<Integer>();
/** accpet all edges **/
System.out.println("\nEnter number of edges");
int E = scan.nextInt();
/** all edges **/
System.out.println("Enter "+ E +" x, y coordinates");
for (int i = 0; i < E; i++)
{
int x = scan.nextInt();
int y = scan.nextInt();
g[x].add(y);
}
Tarjan t = new Tarjan();
System.out.println("\nSCC : ");
/** print all strongly connected components **/
List<List<Integer>> scComponents = t.getSCComponents(g);
System.out.println(scComponents);
}
}
Tarjan algorithm Test Enter number of Vertices 8 Enter number of edges 14 Enter 14 x, y coordinates 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 SCC : [[5, 6], [7, 3, 2], [4, 1, 0]]
Related posts:
Introduction to Spring Cloud CLI
Spring Boot - Cloud Configuration Server
Java Program to Check whether Undirected Graph is Connected using BFS
Retrieve User Information in Spring Security
Java Program to Find Nearest Neighbor for Dynamic Data Set
Java Program to Implement Efficient O(log n) Fibonacci generator
Java Program to Perform Arithmetic Operations on Numbers of Size
Java Program to Create a Minimal Set of All Edges Whose Addition will Convert it to a Strongly Conne...
Spring Boot - Code Structure
Introduction to the Java NIO2 File API
Kiểu dữ liệu Ngày Giờ (Date Time) trong java
Java Program to Find the Number of Ways to Write a Number as the Sum of Numbers Smaller than Itself
Java toString() Method
Java Program to find the number of occurrences of a given number using Binary Search approach
Java Program to Check whether Directed Graph is Connected using DFS
Consumer trong Java 8
Extract links from an HTML page
Disable Spring Data Auto Configuration
Validate email address exists or not by Java Code
A Guide to JUnit 5 Extensions
Java Program to Check whether Graph is a Bipartite using BFS
Hướng dẫn Java Design Pattern – Bridge
Removing Elements from Java Collections
Spring MVC Content Negotiation
Spring Cloud – Adding Angular
Java Program to Implement Word Wrap Problem
Hướng dẫn sử dụng Lớp FilePermission trong java
Java Program to Implement Fenwick Tree
Java InputStream to Byte Array and ByteBuffer
Java Program to Implement Hopcroft Algorithm
The StackOverflowError in Java
Using the Map.Entry Java Class