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:
Receive email using IMAP
Converting a Stack Trace to a String in Java
Spring WebFlux Filters
Java – Reader to InputStream
Java Program to Solve Tower of Hanoi Problem using Stacks
Spring Cloud Series – The Gateway Pattern
SOAP Web service: Authentication trong JAX-WS
Getting the Size of an Iterable in Java
Spring @RequestParam Annotation
Custom JUnit 4 Test Runners
Java Program to Implement Selection Sort
Spring Boot - Actuator
Java Program to Implement Sieve Of Eratosthenes
HTTP Authentification and CGI/Servlet
A Guide to Queries in Spring Data MongoDB
Optional trong Java 8
Apache Camel with Spring Boot
Serverless Functions with Spring Cloud Function
Java Program to Implement Segment Tree
Java Program to Perform Polygon Containment Test
Giới thiệu JDBC Connection Pool
Tính kế thừa (Inheritance) trong java
Java Program to Check Whether Topological Sorting can be Performed in a Graph
Spring Web Annotations
Java Program to Implement LinkedHashSet API
Logout in an OAuth Secured Application
ETL with Spring Cloud Data Flow
A Guide to Spring Boot Admin
Java Program to Implement Cubic convergence 1/pi Algorithm
An Introduction to Java.util.Hashtable Class
Introduction to Apache Commons Text
Đồng bộ hóa các luồng trong Java