Identify the strongly connected components in a graph using an int value
to mark the component to which each vertex belongs.
Cf. CLRS, p. 617.
The run() method of StronglyConnectedComponents creates a Transposer object
in which the target graph has vertices of type U, which must be a subclass
of OrderedDfsVertex. The vertices of the input graph must be subclasses
of DfsVertex and must support component labeling but need not themselves
support ordered depth-first search.
Marks the strongly connected components in the graph by setting
the treeNumber field of each vertex accordingly. Vertices in the
same strongly connected component will have the same tree number,
and vertices belonging to different components will have different
the Transposer object created when setting the vertex tree numbers.
This object contains both the transpose graph that was created and
a map from vertices of the original graph to the transpose graph.