in src/main/java/org/apache/commons/graph/scc/CheriyanMehlhornGabowAlgorithm.java [63:96]
private void dfs( V vertex )
{
marked.add( vertex );
preorder.put( vertex, preorderCounter++ );
s.push( vertex );
p.push( vertex );
for ( V w : graph.getConnectedVertices( vertex ) )
{
if ( !marked.contains( w ) )
{
dfs( w );
}
else if ( sscId.get( w ) == null )
{
while ( preorder.get( p.peek() ) > preorder.get( w ) )
{
p.pop();
}
}
}
if ( p.peek().equals( vertex ) )
{
p.pop();
V w = null;
do
{
w = s.pop();
sscId.put( w, sscCounter );
}
while ( !vertex.equals( w ) );
sscCounter++;
}
}