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

import salvo.jesus.graph.Graph;
import salvo.jesus.graph.Vertex;
import salvo.jesus.graph.Visitor;
import salvo.jesus.util.EmptyQueueException;
import salvo.jesus.util.Queue;

public class BreadthFirstTraversal extends GraphTraversal
{
    Queue queue = new Queue();
    
    public BreadthFirstTraversal(Graph graph) {
	super(graph);
    }
    
    public int traverse(Vertex vertex, Vector vector, Visitor visitor) {
	queue.put(vertex);
	try {
	    do {
		Vertex vertex_0_ = (Vertex) queue.get();
		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_)
			&& !queue.isQueued(vertex_2_))
			queue.put(vertex_2_);
		}
	    } while (!queue.isEmpty());
	} catch (EmptyQueueException emptyqueueexception) {
	    /* empty */
	} finally {
	    return 1;
	}
    }
    
    public Vector traverse(Vertex vertex, Visitor visitor) {
	Vector vector = new Vector();
	traverse(vertex, vector, visitor);
	return vector;
    }
    
    public Vector traverse(Vertex vertex) {
	Vector vector = new Vector();
	traverse(vertex, vector, new Visitor());
	return vector;
    }
}
