Java Program to Check whether Undirected Graph is Connected using BFS

This Java program, to perform the bfs traversal of a given undirected graph in the form of the adjacency matrix and check for the connectivity of the graph.the bfs traversal makes use of a queue.

Here is the source code of the Java program to check the connectivity of the undirected graph using BFS. The Java program is successfully compiled and run on a Linux system. The program output is also shown below.

import java.util.InputMismatchException;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
 
public class UndirectedConnectivityBFS
{
    private Queue<Integer> queue;
 
    public UndirectedConnectivityBFS()
    {
        queue = new LinkedList<Integer>();
    }
 
    public void bfs(int adjacency_matrix[][], int source)
    {
        int number_of_nodes = adjacency_matrix.length - 1;
 
        int[] visited = new int[number_of_nodes + 1];
        int i, element;
        visited = 1;
        queue.add(source);
        while (!queue.isEmpty())
        {
            element = queue.remove();
            i = element;
            while (i <= number_of_nodes)
            {
                if (adjacency_matrix[element][i] == 1 && visited[i] == 0)
                {
                    queue.add(i);
                    visited[i] = 1;
                }
                i++;
            }
        }  
        boolean connected = false; 
 
        for (int vertex = 1; vertex <= number_of_nodes; vertex++)
        {
            if (visited[vertex] == 1)
            {
                connected = true;
            } else
            {
                connected = false;
                break;
            }
        }
 
        if (connected)
        {
            System.out.println("The graph is connected");
        } else
        {
            System.out.println("The graph is disconnected");
        }
    }
 
    public static void main(String... arg)
    {
        int number_no_nodes, source;
        Scanner scanner = null;
 
        try
        {
            System.out.println("Enter the number of nodes in the graph");
            scanner = new Scanner(System.in);
            number_no_nodes = scanner.nextInt();
 
            int adjacency_matrix[][] = new int[number_no_nodes + 1][number_no_nodes + 1];
            System.out.println("Enter the adjacency matrix");
            for (int i = 1; i <= number_no_nodes; i++)
                for (int j = 1; j <= number_no_nodes; j++)
                    adjacency_matrix[i][j] = scanner.nextInt();
 
            for (int i = 1; i <= number_of_nodes; i++)
            {
                for (int j = 1; j <= number_of_nodes; j++)
                {
                    if (adjacency_matrix[i][j] ==  1 && adjacency_matrix[j][i] == 0)
                    {
                        adjacency_matrix[j][i] = 1;
                    }
                }
            }
 
            System.out.println("Enter the source for the graph");
            source = scanner.nextInt();
 
            UndirectedConnectivityBFS undirectedConnectivity= new UndirectedConnectivityBFS();
            undirectedConnectivity.bfs(adjacency_matrix, source);
 
        } catch (InputMismatchException inputMismatch)
        {
            System.out.println("Wrong Input Format");
        }
        scanner.close();
    }
}
$javac UndirectedConnectivityBFS.java
$java UndirectedConnectivityBFS
Enter the number of nodes in the graph
5
Enter the adjacency matrix
0 1 1 1 0
0 0 1 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
Enter the source for the graph
1
The graph is disconnected

Related posts:

HttpAsyncClient Tutorial
Java Program to add two large numbers using Linked List
Apache Commons Collections MapUtils
Hướng dẫn Java Design Pattern – Adapter
Java Program to Implement PrinterStateReasons API
Jackson – Change Name of Field
Java Program to Implement Queue
Redirect to Different Pages after Login with Spring Security
Guava Collections Cookbook
Hướng dẫn Java Design Pattern – Transfer Object
Guide to Apache Commons CircularFifoQueue
Java Program to Generate All Possible Subsets with Exactly k Elements in Each Subset
Java Program to Use Dynamic Programming to Solve Approximate String Matching
How to Delay Code Execution in Java
Spring Boot - Tracing Micro Service Logs
A Guide to ConcurrentMap
Java Program to Implement LinkedHashMap API
ThreadPoolTaskExecutor corePoolSize vs. maxPoolSize
New Features in Java 11
Java Program to Implement Quick Sort with Given Complexity Constraint
Concrete Class in Java
Lớp Collections trong Java (Collections Utility Class)
Từ khóa static và final trong java
Giới thiệu Aspect Oriented Programming (AOP)
Java Program to Find MST (Minimum Spanning Tree) using Prim’s Algorithm
A Custom Media Type for a Spring REST API
Java Program to Implement Booth Algorithm
Jackson Unmarshalling JSON with Unknown Properties
Java Program to Implement the linear congruential generator for Pseudo Random Number Generation
Java Program to Implement Sieve Of Eratosthenes
JUnit 5 for Kotlin Developers
Java Program to Check whether Undirected Graph is Connected using DFS