private void DFSUtil(Vertex<Integer> vertex,
            Set<Vertex<Integer>> visited, Deque<Vertex<Integer>> stack) {
        visited.add(vertex);
        for (Vertex<Integer> v : vertex.getAdjacentVertexes()) {
            if (visited.contains(v)) {
                continue;
            }
            DFSUtil(v, visited, stack);
        }
        stack.offerFirst(vertex);
    }
Date 10/01/2014
@author Tushar Roy

Given a directed graph, find all strongly connected components in this graph.
We are going to use Kosaraju's algorithm to find strongly connected component.

Algorithm
Create a order of vertices by finish time in decreasing order.
Reverse the graph
Do a DFS on reverse graph by finish time of vertex and created strongly connected
components.

Runtime complexity - O(V + E)
Space complexity - O(V)

References
https://en.wikipedia.org/wiki/Strongly_connected_component
http://www.geeksforgeeks.org/strongly-connected-components/
src/com/interview/graph/StronglyConnectedComponent.java