Description
The algorithm performs a depth-first search of the given graph ''G'', maintaining as it does two stacks ''S'' and ''P'' (in addition to the normal call stack for a recursive function). Stack ''S'' contains all the vertices that have not yet been assigned to a strongly connected component, in the order in which the depth-first search reaches the vertices. Stack ''P'' contains vertices that have not yet been determined to belong to different strongly connected components from each other. It also uses a counter ''C'' of the number of vertices reached so far, which it uses to compute the preorder numbers of the vertices. When the depth-first search reaches a vertex ''v'', the algorithm performs the following steps: #Set the preorder number of ''v'' to ''C'', and increment ''C''. #Push ''v'' onto ''S'' and also onto ''P''. #For each edge from ''v'' to a neighboring vertex ''w'': #* If the preorder number of ''w'' has not yet been assigned (the edge is a tree edge), recursively search ''w''; #*Otherwise, if ''w'' has not yet been assigned to a strongly connected component (the edge is a forward/back/cross edge): #**Repeatedly pop vertices from ''P'' until the top element of ''P'' has a preorder number less than or equal to the preorder number of ''w''. #If ''v'' is the top element of ''P'': #*Pop vertices from ''S'' until ''v'' has been popped, and assign the popped vertices to a new component. #*Pop ''v'' from ''P''. The overall algorithm consists of a loop through the vertices of the graph, calling this recursive search on each vertex that does not yet have a preorder number assigned to it.Related algorithms
Like this algorithm, Tarjan's strongly connected components algorithm also uses depth first search together with a stack to keep track of vertices that have not yet been assigned to a component, and moves these vertices into a new component when it finishes expanding the final vertex of its component. However, in place of the stack ''P'', Tarjan's algorithm uses a vertex-indexedNotes
References
*. *. *. *. *. *{{citation , last = Sedgewick , first = R. , contribution = 19.8 Strong Components in Digraphs , edition = 3rd , location = Cambridge MA , pages = 205–216 , publisher = Addison-Wesley , title = Algorithms in Java, Part 5 – Graph Algorithms , year = 2004. Graph algorithms Graph connectivity