Page 291, Exercise 6

     To demonstrate that bicon works correctly, we must show that no edge appears in more than one biconnected component.  This is equivalent to indicating that bicon partitions the graph into a forest of spanning trees with each tree representing one biconnected component.
    
To prove that a forest of spanning trees exists, we must establish that each tree in the forest excludes back edges.  Recall that a back edge leads to a previously visited path, and hence introduces a cycle. 

The bicon function uses the back edges to signal the start of a new biconnected component.  It prints out the tree edges of a biconnected component until it encounters a back edge.  At this point, it closes the spanning tree for the old biconnected component, and starts a new spanning tree for the next biconnected component.  The result is a forest of spanning trees.