Java Program to Check the Connectivity of Graph Using DFS

This is a Java Program to implement graph and check the connectivity between nodes using a standard Depth First Search algorithm. Algorithm visits the node that was traversed last or last come first serve basis. We create a visited array to avoid revisiting a node. If destination node appears in visited array, source and destination nodes are connected, not otherwise.

Here is the source code of the Java Program to Check the Connectivity of Graph Using DFS. The Java program is successfully compiled and run on a Windows system. The program output is also shown below.

//This is a java program to check the connectivity of a graph using DFS
import java.util.Scanner;
import java.util.Stack;
 
public class Connectivity_DFS
{
    private final int      vertices;
    private int[][]        adjacency_matrix;
    private Stack<Integer> stack;
 
    public Connectivity_DFS(int v)
    {
        vertices = v;
        adjacency_matrix = new int[vertices + 1][vertices + 1];
        stack = new Stack<Integer>();
    }
 
    public void makeEdge(int to, int from, int edge)
    {
        try
        {
            adjacency_matrix[to][from] = edge;
            adjacency_matrix[from][to] = edge;
        } catch (ArrayIndexOutOfBoundsException index)
        {
            System.out.println("The vertices does not exists");
        }
    }
 
    public int getEdge(int to, int from)
    {
        try
        {
            return adjacency_matrix[to][from];
        } catch (ArrayIndexOutOfBoundsException index)
        {
            System.out.println("The vertices does not exists");
        }
        return -1;
    }
 
    public void dfs(int source)
    {
        int number_of_nodes = adjacency_matrix.length - 1;
        int[] visited = new int[number_of_nodes + 1];
        int i, element;
        visited = 1;
        stack.push(source);
        while (!stack.isEmpty())
        {
            element = stack.pop();
            i = 1;// element;
            while (i <= number_of_nodes)
            {
                if (adjacency_matrix[element][i] == 1 && visited[i] == 0)
                {
                    stack.push(i);
                    visited[i] = 1;
                }
                i++;
            }
        }
 
        System.out.print("The source node " + source + " is connected to: ");
        int count = 0;
        for (int v = 1; v <= number_of_nodes; v++)
            if (visited[v] == 1)
            {
                System.out.print(v + " ");
                count++;
            }
 
        if (count == number_of_nodes)
            System.out.print("\nThe Graph is Connected ");
        else
            System.out.print("\nThe Graph is Disconnected ");
    }
 
    public static void main(String args[])
    {
        int v, e, count = 1, to = 0, from = 0;
        Scanner sc = new Scanner(System.in);
        Connectivity_DFS graph;
        System.out.println("The Undirected Graph Connectivity Test");
        try
        {
            System.out.println("Enter the number of vertices: ");
            v = sc.nextInt();
            System.out.println("Enter the number of edges: ");
            e = sc.nextInt();
 
            graph = new Connectivity_DFS(v);
 
            System.out.println("Enter the edges: <to> <from>");
            while (count <= e)
            {
                to = sc.nextInt();
                from = sc.nextInt();
 
                graph.makeEdge(to, from, 1);
                count++;
            }
 
            System.out.println("The adjacency matrix for the given graph is: ");
            System.out.print("  ");
            for (int i = 1; i <= v; i++)
                System.out.print(i + " ");
            System.out.println();
 
            for (int i = 1; i <= v; i++)
            {
                System.out.print(i + " ");
                for (int j = 1; j <= v; j++)
                    System.out.print(graph.getEdge(i, j) + " ");
                System.out.println();
            }
 
            System.out.println("Enter the Source Node: ");
            int sourceNode = sc.nextInt();
            graph.dfs(sourceNode);
 
        } catch (Exception E)
        {
            System.out.println("Somthing went wrong");
        }
 
        sc.close();
    }
}

Output:

$ javac Connectivity_DFS.java
$ java Connectivity_DFS
 
The Undirected Graph Connectivity Test(DFS)
Enter the number of vertices: 
4
Enter the number of edges: 
2
Enter the edges: <to> <from>
1 2
1 3
The adjacency matrix for the given graph is: 
  1 2 3 4 
1 0 1 1 0 
2 1 0 0 0 
3 1 0 0 0 
4 0 0 0 0 
Enter the Source Node: 
2
The source node 2 is connected to: 1 2 3 
The Graph is Disconnected 
 
The Undirected Graph Connectivity Test(DFS)
Enter the number of vertices: 
4
Enter the number of edges: 
4
Enter the edges: <to> <from>
1 2
1 3
1 4
2 4
The adjacency matrix for the given graph is: 
  1 2 3 4 
1 0 1 1 1 
2 1 0 0 1 
3 1 0 0 0 
4 1 1 0 0 
Enter the Source Node: 
4
The source node 4 is connected to: 1 2 3 4 
The Graph is Connected

Related posts:

Java Map With Case-Insensitive Keys
Java Program to Solve a Matching Problem for a Given Specific Case
New Features in Java 14
Enum trong java
Java Program to Check whether Undirected Graph is Connected using BFS
Immutable ArrayList in Java
Create a Custom Auto-Configuration with Spring Boot
Java Program to Implement Solovay Strassen Primality Test Algorithm
Java Program to Represent Linear Equations in Matrix Form
Overview of the java.util.concurrent
Java Program to Implement Johnson’s Algorithm
Java Program to Compute Discrete Fourier Transform Using the Fast Fourier Transform Approach
Java Program to Implement Binary Tree
Java Program to Perform Encoding of a Message Using Matrix Multiplication
Giới thiệu JDBC Connection Pool
Validations for Enum Types
Java Program to Check if a Given Set of Three Points Lie on a Single Line or Not
Check If a String Is Numeric in Java
Java Program to Implement Branch and Bound Method to Perform a Combinatorial Search
Debug a JavaMail Program
Java Program to implement Bit Matrix
Spring WebClient Requests with Parameters
Guide to DelayQueue
How to Read a Large File Efficiently with Java
Java Program to Find the Nearest Neighbor Using K-D Tree Search
DistinctBy in the Java Stream API
Java Program to Implement Hash Tables with Double Hashing
Java Program to Generate Random Partition out of a Given Set of Numbers or Characters
Introduction to Java 8 Streams
Java Program to Implement CountMinSketch
Java Program to Implement Attribute API
Java Program to Find kth Largest Element in a Sequence