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:
Spring Cloud – Bootstrapping
Java Program to Perform Polygon Containment Test
Guide to the Java Clock Class
Java Program to Check whether Graph is a Bipartite using BFS
Java Program to Create a Random Graph Using Random Edge Generation
Java Program to Implement Control Table
Guide to ThreadLocalRandom in Java
How To Serialize and Deserialize Enums with Jackson
The Java 8 Stream API Tutorial
Java Program to Find Shortest Path Between All Vertices Using Floyd-Warshall’s Algorithm
Java Program to Implement Multi-Threaded Version of Binary Search Tree
Java Program to Describe the Representation of Graph using Incidence Matrix
An Intro to Spring Cloud Contract
A Guide to the Java LinkedList
Tạo ứng dụng Java RESTful Client với thư viện OkHttp
Introduction to the Functional Web Framework in Spring 5
Java Program to Encode a Message Using Playfair Cipher
Apache Commons Collections Bag
HashSet trong java
A Guide to Apache Commons Collections CollectionUtils
How to Manually Authenticate User with Spring Security
Java Program to Perform Optimal Paranthesization Using Dynamic Programming
Java Program to Implement Fibonacci Heap
ThreadPoolTaskExecutor corePoolSize vs. maxPoolSize
HttpClient Timeout
Java Program to Implement Kosaraju Algorithm
Send email with authentication
Quick Guide to the Java StringTokenizer
Quick Guide to Spring MVC with Velocity
Java Program to Implement Branch and Bound Method to Perform a Combinatorial Search
Java Program to Implement Gale Shapley Algorithm
Java Program to Implement the Edmond’s Algorithm for Maximum Cardinality Matching