Hola.
Creo que el algoritmo no es correcto. Por ejemplo, si el grafo solo tiene dos vértices conectados por una arista entiendo que este algoritmo reporta incorrectamente que hay un ciclo. Tampoco se tiene en cuenta que el grafo podría no ser conexo.
Como sugerencia, me parece que el algoritmo es más complicado de lo necesario y eso dificulta analizar su corrección. Esencialmente lo que hay que hacer es detectar una arista del grafo que no pertenece al árbol, y construir un ciclo desde ahí. El resultado (3.7) del libro y su demostración les podría ayudar.
Tengo la impresión de que la versión recursiva de DFS es más sencilla de adaptar a este problema que la iterativa, pero se puede hacer de cualquiera de las dos formas.
Saludos,
Álvaro