Java Program to Check Whether Undirected Graph is Connected Using DFS

Given an undirected graph, the task is to check if the given graph is connected or not using DFS.
A connected graph is a graph that is connected in the sense of a topological space, i.e., there is always a path from any node to any other node in the graph. A graph that is not connected is said to be disconnected.
Examples:
Input:
Output: Graph is connected
Input:
Output: Graph is disconnected
Approach:
- Take a boolean visited [] array.
- Start DFS(Depth First Search) from any of the vertexes and mark the visited vertices as True in the visited[] array.
- After completion of DFS check if all the vertices in the visited [] array is marked as True.
- If yes then the graph is connected, or else the graph is not connected or disconnected.
Code:
Java
// Java Program to check if // an undirected graph is connected or not// using DFS import java.util.*; public class checkConnectivity { // Graph class static class Graph{ int vertices; // Linked list for adjacency list of a vertex LinkedList<Integer> adjacencyList []; @SuppressWarnings("unchecked") public Graph(int vertices) { this.vertices = vertices; adjacencyList = new LinkedList[vertices]; for (int i = 0; i<vertices ; i++) { adjacencyList[i] = new LinkedList<>(); } } // Function for adding edges public void addEdge(int source, int dest) { adjacencyList.addFirst(dest); adjacencyList[dest].addFirst(source); } } // Function to check if the graph is connected or not public void isConnected(Graph graph){ int vertices = graph.vertices; LinkedList<Integer> adjacencyList [] = graph.adjacencyList; // Take a boolean visited array boolean[] visited = new boolean[vertices]; // Start the DFS from vertex 0 DFS(0, adjacencyList, visited); // Check if all the vertices are visited // Set connected to False if one node is unvisited boolean connected = true; for (int i = 0; i <visited.length ; i++) { if(!visited[i]){ connected = false; break; } } if(connected){ System.out.println("Graph is connected"); }else{ System.out.println("Graph is disconnected"); } } public void DFS(int source, LinkedList<Integer> adjacencyList [], boolean[] visited){ // Mark the vertex visited as True visited = true; // Travel the adjacent neighbours for (int i = 0; i <adjacencyList.size() ; i++) { int neighbour = adjacencyList.get(i); if(visited[neighbour]==false){ // Call DFS from neighbour DFS(neighbour, adjacencyList, visited); } } } // Driver code public static void main(String[] args) { // Given graph 1 Graph graph = new Graph(5); graph.addEdge(0,1); graph.addEdge(0,4); graph.addEdge(1,4); graph.addEdge(1,3); graph.addEdge(3,4); graph.addEdge(2,1); graph.addEdge(2,3); // Check if it's connected System.out.print("Graph 1:- "); checkConnectivity c = new checkConnectivity(); c.isConnected(graph); // Given graph 2 graph = new Graph(5); graph.addEdge(0,1); graph.addEdge(0,4); graph.addEdge(1,4); graph.addEdge(1,3); graph.addEdge(3,4); // Check if it's connected System.out.print("Graph 2:- "); c = new checkConnectivity(); c.isConnected(graph); }} |
Output
Graph 1:- Graph is connected Graph 2:- Graph is disconnected




