This is a java program to test whether a directed graph is strongly connected or not. The graph is strongly connected if it has only one connected component.
Here is the source code of the Java Program to Test Using DFS Whether a Directed Graph is Strongly Connected or Not. The Java program is successfully compiled and run on a Windows system. The program output is also shown below.
package com.maixuanviet.graph; import java.util.*; public class StronglyConnectedGraph { private int V; private int preCount; private int[] low; private boolean[] visited; private List<Integer>[] graph; private List<List<Integer>> sccComp; private Stack<Integer> stack; /** function to get all strongly connected components **/ public List<List<Integer>> getSCComponents(List<Integer>[] graph) { V = graph.length; this.graph = graph; low = new int[V]; visited = new boolean[V]; stack = 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) { low[v] = preCount++; visited[v] = true; stack.push(v); int min = low[v]; for (int w : graph[v]) { if (!visited[w]) dfs(w); if (low[w] < min) min = low[w]; } if (min < low[v]) { low[v] = min; return; } List<Integer> component = new ArrayList<Integer>(); int w; do { w = stack.pop(); component.add(w); low[w] = V; } while (w != v); sccComp.add(component); } @SuppressWarnings("unchecked") public static void main(String[] args) { Scanner scan = new Scanner(System.in); 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>(); /** accept all edges **/ System.out.println("Enter number of edges"); int E = scan.nextInt(); /** all edges **/ System.out.println("Enter the edges in the graph : <from> <to>"); for (int i = 0; i < E; i++) { int x = scan.nextInt(); int y = scan.nextInt(); g[x].add(y); } StronglyConnectedGraph t = new StronglyConnectedGraph(); System.out.print("The graph is strongly connected? : "); /** print all strongly connected components **/ List<List<Integer>> scComponents = t.getSCComponents(g); Iterator<List<Integer>> iterator = scComponents.iterator(); boolean stronglyConnected = true; while (iterator.hasNext()) { if (iterator.next().size() <= 1) { stronglyConnected = false; } } System.out.println(stronglyConnected); scan.close(); } }
Output:
$ javac StronglyConnectedGraph.java $ java StronglyConnectedGraph Enter number of Vertices 6 Enter number of edges 7 Enter the edges in the graph : <from> <to> 0 1 1 2 1 3 3 4 4 5 5 3 5 2 The graph is strongly connected? : false Enter number of Vertices 8 Enter number of edges 14 Enter the edges in the graph : <from> <to> 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 The graph is strongly connected? : true
Related posts:
Guide to Apache Commons CircularFifoQueue
Hướng dẫn Java Design Pattern – Composite
Java Program to Use Above Below Primitive to Test Whether Two Lines Intersect
Java Program to Implement Wagner and Fisher Algorithm for online String Matching
XML Serialization and Deserialization with Jackson
Functional Interface trong Java 8
Java Program to Search for an Element in a Binary Search Tree
Java Program to Solve Tower of Hanoi Problem using Stacks
Java Program to Implement Interpolation Search Algorithm
Guide to the Synchronized Keyword in Java
Java Program to Implement Circular Doubly Linked List
Java Program to Implement Stack API
Java Program to Perform Postorder Non-Recursive Traversal of a Given Binary Tree
Java Program to Implement Binary Heap
Java Program to Implement Hash Tables chaining with Singly Linked Lists
Java Program to Implement Cubic convergence 1/pi Algorithm
Java Program to Compute Discrete Fourier Transform Using Naive Approach
Java Program to Find kth Largest Element in a Sequence
Java Program to Solve TSP Using Minimum Spanning Trees
Java – Random Long, Float, Integer and Double
Remove All Occurrences of a Specific Value from a List
Guide to the Java Clock Class
Guide to Spring @Autowired
Java Program to Implement Sorted Singly Linked List
Java Program to Implement Leftist Heap
Java Program to Perform Optimal Paranthesization Using Dynamic Programming
Java Program to Implement Counting Sort
Consumer trong Java 8
Chuyển đổi từ HashMap sang ArrayList
Java Program to Find the GCD and LCM of two Numbers
Spring REST API + OAuth2 + Angular
Guide to Dynamic Tests in Junit 5