title: How to print each cycle in a directed graph Java?
body: <p>I'm in a super trouble. I really don't know how to modify the code to print each cycle that has been found. Actually the code below is returning if the graph contains a cycle, but I also want to know what are all the possible cycles. </p>
  
  <p>For example, the following graph contains three cycles 0->2->0, 0->1->2->0 and 3->3, so your function must return true.</p>
  
  <pre><code>// A Java Program to detect cycle in a graph
  import java.util.ArrayList;
  import java.util.LinkedList;
  import java.util.List;
  
  class Graph {
      private final int V;
      private final List&lt;List&lt;Integer&gt;&gt; adj;
  
      public Graph(int V) 
      {
          this.V = V;
          adj = new ArrayList&lt;&gt;(V);
  
          for (int i = 0; i &lt; V; i++)
              adj.add(new LinkedList&lt;&gt;());
      }
  
      // This function is a variation of DFSUytil() in 
      // https://www.geeksforgeeks.org/archives/18212
      private boolean isCyclicUtil(int i, boolean[] visited, boolean[] recStack) 
      {
          // Mark the current node as visited and
          // part of recursion stack
          if (recStack[i])
              return true;
  
          if (visited[i])
              return false;
  
          visited[i] = true;
  
          recStack[i] = true;
          List&lt;Integer&gt; children = adj.get(i);
  
          for (Integer c: children)
              if (isCyclicUtil(c, visited, recStack))
                  return true;
  
          recStack[i] = false;
  
          return false;
      }
  
      private void addEdge(int source, int dest) {
          adj.get(source).add(dest);
      }
  
      // Returns true if the graph contains a 
      // cycle, else false.
      // This function is a variation of DFS() in 
      // https://www.geeksforgeeks.org/archives/18212
      private boolean isCyclic() 
      {
          // Mark all the vertices as not visited and
          // not part of recursion stack
          boolean[] visited = new boolean[V];
          boolean[] recStack = new boolean[V];
  
          // Call the recursive helper function to
          // detect cycle in different DFS trees
          for (int i = 0; i &lt; V; i++)
              if (isCyclicUtil(i, visited, recStack))
                  return true;
  
          return false;
      }
  
      // Driver code
      public static void main(String[] args)
      {
          Graph graph = new Graph(4);
          graph.addEdge(0, 1);
          graph.addEdge(0, 2);
          graph.addEdge(1, 2);
          graph.addEdge(2, 0);
          graph.addEdge(2, 3);
          graph.addEdge(3, 3);
  
          if(graph.isCyclic())
              System.out.println("Graph contains cycle");
          else
              System.out.println("Graph doesn't "
                                  + "contain cycle");
      }
  }
  </code></pre>
  
  <p>Thank you so much.</p>