# From CLR Algorithms book


     DFS(Graph: G):

        # initialization 
        Forall vertices v in V:
           set v.color to white
           set v.parent to :none:
        set time to 0

        # main loop
        Forall vertices v in V:
           if v.color is white then DFS_Visit(v)

    end # DFS


    DFS_Visit(Vertex: v):

        # discovery activities
        set v.color to grey
        increment time
        set v.discover to time

        # search neighbors
        Forall vertices u neighbors of v:   # i.e. v->u edge
            if u.color is white:
                # u is discovered
                set u.parent to v  # this is done here because we 
                                   # know v and because tree roots 
                                   # have no parents
                DFS_Visit(u)    # recursion!

        # finishing activities
        set v.color to black
        increment time
        set v.finish to time

     end # DFS_Visit