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

