Draw your graph:

for(i = 0 to graph.getVertCount())
  if(!visited[i])
    stack = dsf(i)
setUnvisited(graph.vertices)
transpose(graph)
while(!stack.empty())
  vert = stack.pop()
  if(!visited[vert])
    scc = dfs(vert)
SHORT EXPLANATION
---------------------
1. Mark all vertices as unvisited.
2. Run a Depth-first search on every unvisited vertex.
3. Whenever a DFS finishes add the vertex it was run on to the stack.
4. Transpose the graph (-> reverse the direction of the edges).
4. Pop from the stack and run a DFS on the vertex if it hasn't been visited already.
- every finished DFS yields a list of vertices, which is a strongly connected component
5. Repeat step 4 until the stack is empty.

To draw a new vertex, simply click anywhere on the canvas above.
To create an edge between two vertices, click on the first vertex and then on the second one.
You can create a random graph by clicking on the 'Random' button above the canvas.
To clear the canvas, use the 'Clear' button.
Speed:
Slow   Fast