Java Program for Depth First Search or DFS for a Graph

22 Jun, 2022
Depth First Traversal (or Search) for a graph is similar to Depth First Traversal of a tree. The only catch here is, unlike trees, graphs may contain cycles, so we may come to the same node again. To avoid processing a node more than once, we use a boolean visited array.
For example, in the following graph, we start traversal from vertex 2. When we come to vertex 0, we look for all adjacent vertices of it. 2 is also an adjacent vertex of 0. If we don\’t mark visited vertices, then 2 will be processed again and it will become a non-terminating process. A Depth First Traversal of the following graph is 2, 0, 1, 3.
See this post for all applications of Depth First Traversal.Following are implementations of simple Depth First Traversal. The C++ implementation uses adjacency list representation of graphs. STL\’s list container is used to store lists of adjacent nodes.
Java
// Java program to print DFS traversal from a given graphimport java.io.*;import java.util.*; // This class represents a directed graph using adjacency list// representationclass Graph{    private int V;   // No. of vertices     // Array  of lists for Adjacency List Representation    private LinkedList<Integer> adj[];     // Constructor    Graph(int v)    {        V = v;        adj = new LinkedList[v];        for (int i=0; i<v; ++i)            adj[i] = new LinkedList();    }     //Function to add an edge into the graph    void addEdge(int v, int w)    {        adj[v].add(w);    // Add w to v\'s list.    }     // A function used by DFS    void DFSUtil(int v,boolean visited[])    {        // Mark the current node as visited and print it        visited[v] = true;        System.out.print(v+" ");         // Recur for all the vertices adjacent to this vertex        Iterator<Integer> i = adj[v].listIterator();        while (i.hasNext())        {            int n = i.next();            if (!visited[n])                DFSUtil(n,visited);        }    }     // The function to do DFS traversal. It uses recursive DFSUtil()    void DFS()    {        // Mark all the vertices as not visited(set as        // false by default in java)        boolean visited[] = new boolean[V];         // Call the recursive helper function to print DFS traversal        // starting from all vertices one by one        for (int i=0; i<V; ++i)            if (visited[i] == false)                DFSUtil(i, visited);    }     public static void main(String args[])    {        Graph g = new Graph(4);         g.addEdge(0, 1);        g.addEdge(0, 2);        g.addEdge(1, 2);        g.addEdge(2, 0);        g.addEdge(2, 3);        g.addEdge(3, 3);         System.out.println("Following is Depth First Traversal");         g.DFS();    }}// This code is contributed by Aakash Hasija
Time Complexity : O(V+E) where V is the number of vertices in graph and E is the number of edgesAuxiliary Space: O(V)Please refer complete article on Depth First Search or DFS for a Graph for more details!
sweetyty
ishankhandelwals
Java Programs
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Iterate Over the Characters of a String in Java
How to Convert Char to String in Java?
How to Insert an element at a specific position in an Array in Java
Java Program to Write an Array of Strings to the Output Console
SHA-1 Hash
How to Create a Package in Java?
Java Program to Write into a File
Java Program to Convert String to String Array
Java Program to Find Sum of Array Elements
How to Get Elements By Index from HashSet in Java?