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 Program to Implement Doubly Linked List
Java Program to Construct an Expression Tree for an Prefix Expression
Hướng dẫn Java Design Pattern – Intercepting Filter
Java Program to Implement Quick sort
Java Program to Describe the Representation of Graph using Incidence Matrix
Java Program to Implement Double Ended Queue
Java Program to Implement Fenwick Tree
Quản lý bộ nhớ trong Java với Heap Space vs Stack
Spring Boot - Code Structure
A Quick Guide to Spring Cloud Consul
Java Program to Implement Extended Euclid Algorithm
Logout in an OAuth Secured Application
Convert String to int or Integer in Java
Java Program to Implement the Vigenere Cypher
Java Program to Perform Polygon Containment Test
Hướng dẫn sử dụng Printing Service trong Java
New Features in Java 13
Java Program for Topological Sorting in Graphs
Luồng Daemon (Daemon Thread) trong Java
Hướng dẫn Java Design Pattern – Null Object
Java Program to Implement Ford–Fulkerson Algorithm
Instance Profile Credentials using Spring Cloud
Implementing a Runnable vs Extending a Thread
HttpAsyncClient Tutorial
String Operations with Java Streams
Sort a HashMap in Java
Rest Web service: Filter và Interceptor với Jersey 2.x (P2)
Spring Boot - Tracing Micro Service Logs
A Guide to JUnit 5 Extensions
Hướng dẫn Java Design Pattern – Mediator
Hướng dẫn kết nối cơ sở dữ liệu với Java JDBC
Spring Boot Actuator