This is a Java Program to Implement Gabow Algorithm. Gabow algorithm is used for finding all strongly connected components in a graph.
Here is the source code of the Java Program to Implement Gabow Algorithm. The Java program is successfully compiled and run on a Windows system. The program output is also shown below.
/**
* Java Program to Implement Gabow Algorithm
**/
import java.util.*;
/** class Gabow **/
class Gabow
{
/** number of vertices **/
private int V;
/** preorder number counter **/
private int preCount;
private int[] preorder;
/** to check if v is visited **/
private boolean[] visited;
/** check strong componenet containing v **/
private boolean[] chk;
/** to store given graph **/
private List<Integer>[] graph;
/** to store all scc **/
private List<List<Integer>> sccComp;
private Stack<Integer> stack1;
private Stack<Integer> stack2;
/** function to get all strongly connected components **/
public List<List<Integer>> getSCComponents(List<Integer>[] graph)
{
V = graph.length;
this.graph = graph;
preorder = new int[V];
chk = new boolean[V];
visited = new boolean[V];
stack1 = new Stack<Integer>();
stack2 = new Stack<Integer>();
sccComp = new ArrayList<>();
for (int v = 0; v < V; v++)
if (!visited[v])
dfs(v);
return sccComp;
}
/** function dfs **/
public void dfs(int v)
{
preorder[v] = preCount++;
visited[v] = true;
stack1.push(v);
stack2.push(v);
for (int w : graph[v])
{
if (!visited[w])
dfs(w);
else if (!chk[w])
while (preorder[stack2.peek()] > preorder[w])
stack2.pop();
}
if (stack2.peek() == v)
{
stack2.pop();
List<Integer> component = new ArrayList<Integer>();
int w;
do
{
w = stack1.pop();
component.add(w);
chk[w] = true;
} while (w != v);
sccComp.add(component);
}
}
/** main **/
public static void main(String[] args)
{
Scanner scan = new Scanner(System.in);
System.out.println("Gabow algorithm Test\n");
System.out.println("Enter number of Vertices");
/** number of vertices **/
int V = scan.nextInt();
/** make graph **/
List<Integer>[] g = new List[V];
for (int i = 0; i < V; i++)
g[i] = new ArrayList<Integer>();
/** accpet all edges **/
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();
g[x].add(y);
}
Gabow gab = new Gabow();
System.out.println("\nSCC : ");
/** print all strongly connected components **/
List<List<Integer>> scComponents = gab.getSCComponents(g);
System.out.println(scComponents);
}
}
Gabow 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 : [[5, 6], [7, 3, 2], [4, 1, 0]]
Related posts:
Cơ chế Upcasting và Downcasting trong java
Java Program to Perform Uniform Binary Search
Guide To CompletableFuture
Hướng dẫn sử dụng String Format trong Java
Bootstrapping Hibernate 5 with Spring
The Spring @Controller and @RestController Annotations
Using a Custom Spring MVC’s Handler Interceptor to Manage Sessions
HttpClient Basic Authentication
Java Program to Perform Postorder Recursive Traversal of a Given Binary Tree
Spring Boot - Admin Client
Java Program to find the peak element of an array using Binary Search approach
LIKE Queries in Spring JPA Repositories
Introduction to Spliterator in Java
Spring Security 5 – OAuth2 Login
Java Map With Case-Insensitive Keys
Write/Read cookies using HTTP and Read a file from the internet
Deploy a Spring Boot WAR into a Tomcat Server
Java Program to Implement Pollard Rho Algorithm
Java Program to Find Location of a Point Placed in Three Dimensions Using K-D Trees
Spring MVC Tutorial
Migrating from JUnit 4 to JUnit 5
Java Multi-line String
Java Program to Solve Travelling Salesman Problem for Unweighted Graph
ETags for REST with Spring
Cài đặt và sử dụng Swagger UI
Hướng dẫn sử dụng Java Generics
Giới thiệu Google Guice – Dependency injection (DI) framework
Setting a Request Timeout for a Spring REST API
Java Program to Implement the MD5 Algorithm
Java Program to Find the Vertex Connectivity of a Graph
Guide to Character Encoding
Java Program to Print the Kind of Rotation the AVL Tree is Undergoing