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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 | /** ** 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); } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | 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:
Từ khóa this và super trong Java
Hướng dẫn Java Design Pattern – Flyweight
Validate email address exists or not by Java Code
Java Program to Generate N Number of Passwords of Length M Each
Java Program to Find a Good Feedback Vertex Set
Semaphore trong Java
Java Program to Find Location of a Point Placed in Three Dimensions Using K-D Trees
Giới thiệu HATEOAS
Predicate trong Java 8
Checked and Unchecked Exceptions in Java
Java Program to Implement Stack using Linked List
Java Program to Implement Sparse Array
Using the Map.Entry Java Class
Java Program to Check whether Graph is a Bipartite using 2 Color Algorithm
Lớp HashMap trong Java
Sao chép các phần tử của một mảng sang mảng khác như thế nào?
A Guide to the Java ExecutorService
Zipping Collections in Java
Java Program to Implement Sieve Of Sundaram
Properties with Spring and Spring Boot
Java Program to add two large numbers using Linked List
Java Program to Describe the Representation of Graph using Adjacency Matrix
Hướng dẫn Java Design Pattern – Memento
Java Program to Implement Quick Hull Algorithm to Find Convex Hull
Java Program to Check Cycle in a Graph using Graph traversal
Java Program to Check if a Given Set of Three Points Lie on a Single Line or Not
Sorting Query Results with Spring Data
Spring RestTemplate Request/Response Logging
Các nguyên lý thiết kế hướng đối tượng – SOLID
@Order in Spring
Beans and Dependency Injection
Unsatisfied Dependency in Spring