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); } } |
Graph 1:- Graph is connected Graph 2:- Graph is disconnected