java.lang.Object
org.jgrapht.traverse.AbstractGraphIterator<V,E>
org.jgrapht.traverse.CrossComponentIterator<V,E,DepthFirstIterator.VisitColor>
org.jgrapht.traverse.DepthFirstIterator<V,E>
 Type Parameters:
V
 the graph vertex typeE
 the graph edge type
 All Implemented Interfaces:
Iterator<V>
,GraphIterator<V,
E>
public class DepthFirstIterator<V,E>
extends CrossComponentIterator<V,E,DepthFirstIterator.VisitColor>
A depthfirst iterator for a directed or 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 failfast. The results of such modifications are undefined.
 Author:
 Liviu Rau, Barak Naveh

Nested Class Summary
Modifier and TypeClassDescriptionprotected static enum
Standard vertex visit state enumeration. 
Field Summary
Fields inherited from class org.jgrapht.traverse.AbstractGraphIterator
crossComponentTraversal, graph, nListeners, reusableEdgeEvent, reusableVertexEvent, reuseEvents

Constructor Summary
ConstructorDescriptionDepthFirstIterator
(Graph<V, E> g) Creates a new depthfirst iterator for the specified graph.Creates a new depthfirst iterator for the specified graph.DepthFirstIterator
(Graph<V, E> g, V startVertex) Creates a new depthfirst iterator for the specified graph. 
Method Summary
Modifier and TypeMethodDescriptionprotected void
encounterVertex
(V vertex, E edge) Update data structures the first time we see a vertex.protected void
encounterVertexAgain
(V vertex, E edge) Called whenever we reencounter a vertex.getStack()
Retrieves the LIFO stack of vertices which have been encountered but not yet visited (WHITE).protected boolean
Returnstrue
if there are no more uniterated vertices in the currently iterated connected component;false
otherwise.protected V
Returns the vertex to be returned in the following call to the iteratornext
method.Methods inherited from class org.jgrapht.traverse.CrossComponentIterator
finishVertex, getEntireGraphVertexIterator, getSeenData, hasNext, isSeenVertex, next, putSeenData, selectOutgoingEdges
Methods inherited from class org.jgrapht.traverse.AbstractGraphIterator
addTraversalListener, createEdgeTraversalEvent, createVertexTraversalEvent, fireConnectedComponentFinished, fireConnectedComponentStarted, fireEdgeTraversed, fireVertexFinished, fireVertexTraversed, getGraph, isCrossComponentTraversal, isReuseEvents, remove, removeTraversalListener, setCrossComponentTraversal, setReuseEvents
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Methods 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 depthfirst iterator for the specified graph. Parameters:
g
 the graph to be iterated.

DepthFirstIterator
Creates a new depthfirst 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.

DepthFirstIterator
Creates a new depthfirst iterator for the specified graph. Iteration will start at the specified start vertices and will be limited to the connected component that includes those vertices. If the specified start vertices 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.startVertices
 the vertices iteration to be started.


Method Details

isConnectedComponentExhausted
protected boolean isConnectedComponentExhausted()Description copied from class:CrossComponentIterator
Returnstrue
if there are no more uniterated vertices in the currently iterated connected component;false
otherwise. Specified by:
isConnectedComponentExhausted
in classCrossComponentIterator<V,
E, DepthFirstIterator.VisitColor>  Returns:
true
if there are no more uniterated vertices in the currently iterated connected component;false
otherwise.

encounterVertex
Description copied from class:CrossComponentIterator
Update data structures the first time we see a vertex. Specified by:
encounterVertex
in classCrossComponentIterator<V,
E, DepthFirstIterator.VisitColor>  Parameters:
vertex
 the vertex encounterededge
 the edge via which the vertex was encountered, or null if the vertex is a starting point

encounterVertexAgain
Description copied from class:CrossComponentIterator
Called whenever we reencounter a vertex. The default implementation does nothing. Specified by:
encounterVertexAgain
in classCrossComponentIterator<V,
E, DepthFirstIterator.VisitColor>  Parameters:
vertex
 the vertex reencounterededge
 the edge via which the vertex was reencountered

provideNextVertex
Description copied from class:CrossComponentIterator
Returns the vertex to be returned in the following call to the iteratornext
method. Specified by:
provideNextVertex
in classCrossComponentIterator<V,
E, DepthFirstIterator.VisitColor>  Returns:
 the next vertex to be returned by this iterator.

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 nonsentinel entry is just (v). Returns:
 stack
