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:
Convert XML to JSON Using Jackson
Java Program to Find the Longest Subsequence Common to All Sequences in a Set of Sequences
Java Program to Check Whether Graph is DAG
Java String Conversions
Java Program to Create a Random Linear Extension for a DAG
Java Program to Implement Treap
Java Program to Implement Bit Array
Java Program to Implement Fermat Factorization Algorithm
HTTP Authentification and CGI/Servlet
Java Web Services – Jersey JAX-RS – REST và sử dụng REST API testing tools với Postman
New Features in Java 15
Guide to Java Instrumentation
Spring WebClient Filters
Guide to Escaping Characters in Java RegExps
Java Program to Implement Pagoda
Từ khóa this và super trong Java
Weak References in Java
Java Program to Compute Discrete Fourier Transform Using the Fast Fourier Transform Approach
Java Program to Implement Binary Search Tree
Xử lý ngoại lệ trong Java (Exception Handling)
Java Program to Represent Graph Using Adjacency Matrix
Disable Spring Data Auto Configuration
Phương thức tham chiếu trong Java 8 – Method References
Jackson Unmarshalling JSON with Unknown Properties
Hướng dẫn Java Design Pattern – Adapter
The SpringJUnitConfig and SpringJUnitWebConfig Annotations in Spring 5
Encode a String to UTF-8 in Java
Java InputStream to String
HashMap trong Java hoạt động như thế nào?
Giới thiệu thư viện Apache Commons Chain
Spring MVC Async vs Spring WebFlux
Generating Random Dates in Java