This is a Java Program to Implement Kosaraju Algorithm. Kosaraju’s algorithm is a linear time algorithm to find the strongly connected components of a directed graph.
Here is the source code of the Java Program to Implement Kosaraju Algorithm. The Java program is successfully compiled and run on a Windows system. The program output is also shown below.
/** ** Java Program to Implement Kosaraju Algorithm **/ import java.util.*; /** class Kosaraju **/ public class Kosaraju { /** DFS function **/ public void DFS(List<Integer>[] graph, int v, boolean[] visited, List<Integer> comp) { visited[v] = true; for (int i = 0; i < graph[v].size(); i++) if (!visited[graph[v].get(i)]) DFS(graph, graph[v].get(i), visited, comp); comp.add(v); } /** function fill order **/ public List<Integer> fillOrder(List<Integer>[] graph, boolean[] visited) { int V = graph.length; List<Integer> order = new ArrayList<Integer>(); for (int i = 0; i < V; i++) if (!visited[i]) DFS(graph, i, visited, order); return order; } /** function to get transpose of graph **/ public List<Integer>[] getTranspose(List<Integer>[] graph) { int V = graph.length; List<Integer>[] g = new List[V]; for (int i = 0; i < V; i++) g[i] = new ArrayList<Integer>(); for (int v = 0; v < V; v++) for (int i = 0; i < graph[v].size(); i++) g[graph[v].get(i)].add(v); return g; } /** function to get all SCC **/ public List<List<Integer>> getSCComponents(List<Integer>[] graph) { int V = graph.length; boolean[] visited = new boolean[V]; List<Integer> order = fillOrder(graph, visited); /** get transpose of the graph **/ List<Integer>[] reverseGraph = getTranspose(graph); /** clear visited array **/ visited = new boolean[V]; /** reverse order or alternatively use a stack for order **/ Collections.reverse(order); /** get all scc **/ List<List<Integer>> SCComp = new ArrayList<>(); for (int i = 0; i < order.size(); i++) { /** if stack is used for order pop out elements **/ int v = order.get(i); if (!visited[v]) { List<Integer> comp = new ArrayList<>(); DFS(reverseGraph, v, visited, comp); SCComp.add(comp); } } return SCComp; } /** main **/ public static void main(String[] args) { Scanner scan = new Scanner(System.in); System.out.println("Kosaraju algorithm Test\n"); Kosaraju k = new Kosaraju(); System.out.println("Enter number of Vertices"); /** number of vertices **/ int V = scan.nextInt(); List<Integer>[] g = new List[V]; for (int i = 0; i < V; i++) g[i] = new ArrayList<Integer>(); 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(); /** add edge **/ g[x].add(y); } System.out.println("\nSCC : "); /** print all strongly connected components **/ List<List<Integer>> scComponents = k.getSCComponents(g); System.out.println(scComponents); } }
Kosaraju 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 : [[1, 4, 0], [7, 3, 2], [5, 6]]
Related posts:
Java IO vs NIO
Spring Boot - Tomcat Port Number
New Features in Java 8
Java Program to Find the Mode in a Data Set
How to Count Duplicate Elements in Arraylist
Logging in Spring Boot
“Stream has already been operated upon or closed” Exception in Java
Hashtable trong java
Java Program to Implement the Hill Cypher
Java Program to Implement Weight Balanced Tree
Chuyển đổi giữa các kiểu dữ liệu trong Java
Java Program to Implement Flood Fill Algorithm
Spring Webflux and CORS
Java Program to Implement Park-Miller Random Number Generation Algorithm
Sorting Query Results with Spring Data
Java Program to Perform Stooge Sort
Spring Boot - Rest Template
Queue và PriorityQueue trong Java
The XOR Operator in Java
Rest Web service: Filter và Interceptor với Jersey 2.x (P1)
How to Kill a Java Thread
Encode a String to UTF-8 in Java
Supplier trong Java 8
How to Read HTTP Headers in Spring REST Controllers
Assertions in JUnit 4 and JUnit 5
Java Program to Implement Aho-Corasick Algorithm for String Matching
Java Program to Implement LinkedTransferQueue API
Spring Boot: Customize Whitelabel Error Page
Command-Line Arguments in Java
Exploring the Spring 5 WebFlux URL Matching
Loại bỏ các phần tử trùng trong một ArrayList như thế nào trong Java 8?
A Quick Guide to Spring Cloud Consul