Package org.jgrapht.traverse
Class DepthFirstIterator<V,E>
java.lang.Object
org.jgrapht.traverse.AbstractGraphIterator<V,E>
org.jgrapht.traverse.CrossComponentIterator<V,E,CrossComponentIterator.VisitColor>
org.jgrapht.traverse.DepthFirstIterator<V,E>
- All Implemented Interfaces:
Iterator<V>,GraphIterator<V,E>
public class DepthFirstIterator<V,E>
extends CrossComponentIterator<V,E,CrossComponentIterator.VisitColor>
A depth-first iterator for a directed and an undirected graph. For this
iterator to work correctly the graph must not be modified during iteration.
Currently there are no means to ensure that, nor to fail-fast. The results of
such modifications are undefined.
- Since:
- Jul 29, 2003
- Author:
- Liviu Rau, Barak Naveh
-
Nested Class Summary
Nested classes/interfaces inherited from class org.jgrapht.traverse.CrossComponentIterator
CrossComponentIterator.VisitColor -
Field Summary
FieldsFields inherited from class org.jgrapht.traverse.AbstractGraphIterator
nListeners -
Constructor Summary
ConstructorsConstructorDescriptionDepthFirstIterator(Graph<V, E> g) Creates a new depth-first iterator for the specified graph.DepthFirstIterator(Graph<V, E> g, V startVertex) Creates a new depth-first iterator for the specified graph. -
Method Summary
Modifier and TypeMethodDescriptionprotected voidencounterVertex(V vertex, E edge) Update data structures the first time we see a vertex.protected voidencounterVertexAgain(V vertex, E edge) Called whenever we re-encounter a vertex.getStack()Retrieves the LIFO stack of vertices which have been encountered but not yet visited (WHITE).protected booleanReturns true if there are no more uniterated vertices in the currently iterated connected component; false otherwise.protected VReturns the vertex to be returned in the following call to the iteratornextmethod.Methods inherited from class org.jgrapht.traverse.CrossComponentIterator
finishVertex, getGraph, getSeenData, hasNext, isSeenVertex, next, putSeenDataMethods inherited from class org.jgrapht.traverse.AbstractGraphIterator
addTraversalListener, fireConnectedComponentFinished, fireConnectedComponentStarted, fireEdgeTraversed, fireVertexFinished, fireVertexTraversed, isCrossComponentTraversal, isReuseEvents, remove, removeTraversalListener, setCrossComponentTraversal, setReuseEventsMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface java.util.Iterator
forEachRemaining
-
Field Details
-
SENTINEL
Sentinel object. Unfortunately, we can't use null, because ArrayDeque won't accept those. And we don't want to rely on the caller to provide a sentinel object for us. So we have to play typecasting games.
-
-
Constructor Details
-
DepthFirstIterator
Creates a new depth-first iterator for the specified graph.- Parameters:
g- the graph to be iterated.
-
DepthFirstIterator
Creates a new depth-first iterator for the specified graph. Iteration will start at the specified start vertex and will be limited to the connected component that includes that vertex. If the specified start vertex isnull, iteration will start at an arbitrary vertex and will not be limited, that is, will be able to traverse all the graph.- Parameters:
g- the graph to be iterated.startVertex- the vertex iteration to be started.
-
-
Method Details
-
isConnectedComponentExhausted
protected boolean isConnectedComponentExhausted()Description copied from class:CrossComponentIteratorReturns true if there are no more uniterated vertices in the currently iterated connected component; false otherwise.- Specified by:
isConnectedComponentExhaustedin classCrossComponentIterator<V,E, CrossComponentIterator.VisitColor> - Returns:
- true if there are no more uniterated vertices in the currently iterated connected component; false otherwise.
- See Also:
-
encounterVertex
Description copied from class:CrossComponentIteratorUpdate data structures the first time we see a vertex.- Specified by:
encounterVertexin classCrossComponentIterator<V,E, CrossComponentIterator.VisitColor> - Parameters:
vertex- the vertex encounterededge- the edge via which the vertex was encountered, or null if the vertex is a starting point- See Also:
-
encounterVertexAgain
Description copied from class:CrossComponentIteratorCalled whenever we re-encounter a vertex. The default implementation does nothing.- Specified by:
encounterVertexAgainin classCrossComponentIterator<V,E, CrossComponentIterator.VisitColor> - Parameters:
vertex- the vertex re-encounterededge- the edge via which the vertex was re-encountered- See Also:
-
provideNextVertex
Description copied from class:CrossComponentIteratorReturns the vertex to be returned in the following call to the iteratornextmethod.- Specified by:
provideNextVertexin classCrossComponentIterator<V,E, CrossComponentIterator.VisitColor> - Returns:
- the next vertex to be returned by this iterator.
- See Also:
-
getStack
Retrieves the LIFO stack of vertices which have been encountered but not yet visited (WHITE). This stack also contains sentinel entries representing vertices which have been visited but are still GRAY. A sentinel entry is a sequence (v, SENTINEL), whereas a non-sentinel entry is just (v).- Returns:
- stack
-