/* DepthFirstGraphTraversal - Decompiled by JODE
 * Visit http://jode.sourceforge.net/
 */
package salvo.jesus.graph.algorithm;
import java.util.Iterator;
import java.util.Stack;
import java.util.Vector;

import salvo.jesus.graph.Graph;
import salvo.jesus.graph.Vertex;
import salvo.jesus.graph.Visitor;

public class DepthFirstGraphTraversal extends GraphTraversal
{
    Stack stack = new Stack();
    
    public DepthFirstGraphTraversal(Graph graph) {
	super(graph);
    }
    
    public int traverse(Vertex vertex, Vector vector, Visitor visitor) {
	stack.push(vertex);
	do {
	    Vertex vertex_0_ = (Vertex) stack.pop();
	    vector.add(vertex_0_);
	    if (!visitor.visit(vertex_0_))
		return -1;
	    Vector vector_1_ = graph.getAdjacentVertices(vertex_0_);
	    Iterator iterator = vector_1_.iterator();
	    while (iterator.hasNext()) {
		Vertex vertex_2_ = (Vertex) iterator.next();
		if (!vector.contains(vertex_2_) && !stack.contains(vertex_2_))
		    stack.push(vertex_2_);
	    }
	} while (!stack.isEmpty());
	return 1;
    }
    
    public Vector traverse(Vertex vertex) {
	return traverse(vertex, new Visitor());
    }
    
    public Vector traverse(Vertex vertex, Visitor visitor) {
	Vector vector = new Vector();
	traverse(vertex, vector, visitor);
	return vector;
    }
}
