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:
Java Program for Douglas-Peucker Algorithm Implementation
Java Program to Implement RenderingHints API
Running Spring Boot Applications With Minikube
Java Program to Generate All Pairs of Subsets Whose Union Make the Set
Bootstrap a Web Application with Spring 5
Java Program to Compute Cross Product of Two Vectors
Java Program to Check whether Undirected Graph is Connected using DFS
Injecting Prototype Beans into a Singleton Instance in Spring
Toán tử instanceof trong java
Loại bỏ các phần tử trùng trong một ArrayList như thế nào?
Tính trừu tượng (Abstraction) trong Java
Java Program to Implement Gauss Jordan Elimination
How to Implement Caching using Adonis.js 5
Inject Parameters into JUnit Jupiter Unit Tests
How to Convert List to Map in Java
Instance Profile Credentials using Spring Cloud
Spring Boot Actuator
Java Program to Implement ArrayDeque API
Java Program to Implement Leftist Heap
Spring WebClient and OAuth2 Support
Receive email using POP3
Java Program to Implement Sorted Array
Giới thiệu Google Guice – Aspect Oriented Programming (AOP)
Registration with Spring Security – Password Encoding
Java Collections Interview Questions
A Guide to Java SynchronousQueue
LinkedHashSet trong Java hoạt động như thế nào?
Java Program to Implement D-ary-Heap
Hướng dẫn Java Design Pattern – Abstract Factory
HttpClient Connection Management
Spring Security OAuth2 – Simple Token Revocation
Java Program to Find Transitive Closure of a Graph