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:
An Intro to Spring Cloud Security
Java Program to Check the Connectivity of Graph Using DFS
Java Program to Implement Sorted Circularly Singly Linked List
Spring’s RequestBody and ResponseBody Annotations
Giới thiệu về Stream API trong Java 8
Hướng dẫn tạo và sử dụng ThreadPool trong Java
Apache Commons Collections SetUtils
Working With Maps Using Streams
Java Program to Implement Adjacency List
How to Read a Large File Efficiently with Java
A Guide to Java HashMap
Tạo ứng dụng Java RESTful Client không sử dụng 3rd party libraries
Disable Spring Data Auto Configuration
Java Program to Implement Hash Tables with Double Hashing
A Guide to the Java LinkedList
Java Program to Find the Median of two Sorted Arrays using Binary Search Approach
Java Program to Perform Sorting Using B-Tree
Java Program to Implement Knight’s Tour Problem
Deploy a Spring Boot WAR into a Tomcat Server
Java Program to Check Whether an Input Binary Tree is the Sub Tree of the Binary Tree
Java – Try with Resources
Java Program to Find the Peak Element of an Array O(n) time (Naive Method)
A Guide to JPA with Spring
Java Program to Implement Hash Tables Chaining with Doubly Linked Lists
Hướng dẫn sử dụng biểu thức chính quy (Regular Expression) trong Java
Connect through a Proxy
Case-Insensitive String Matching in Java
Spring – Injecting Collections
How to Use if/else Logic in Java 8 Streams
Java Program to Check Whether a Given Point is in a Given Polygon
Sorting in Java
Spring 5 Testing with @EnabledIf Annotation