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

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `static Object` | `SENTINEL` Sentinel object.

    - ### Fields inherited from class org.jgrapht.traverse.AbstractGraphIterator

      `nListeners`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `DepthFirstIterator(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

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `protected 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 re-encounter a vertex.
    `Deque<Object>` | `getStack()` Retrieves the LIFO stack of vertices which have been encountered but not yet visited (WHITE).
    `protected boolean` | `isConnectedComponentExhausted()` Returns `true` if there are no more uniterated vertices in the currently iterated connected component; `false` otherwise.
    `protected V` | `provideNextVertex()` Returns the vertex to be returned in the following call to the iterator `next` method.

    - ### Methods inherited from class org.jgrapht.traverse.CrossComponentIterator

      `finishVertex, getGraph, getSeenData, hasNext, isSeenVertex, next, putSeenData`

    - ### Methods inherited from class org.jgrapht.traverse.AbstractGraphIterator

      `addTraversalListener, fireConnectedComponentFinished, fireConnectedComponentStarted, fireEdgeTraversed, fireVertexFinished, fireVertexTraversed, isCrossComponentTraversal, isReuseEvents, remove, removeTraversalListener, setCrossComponentTraversal, setReuseEvents`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Field Detail

    - #### SENTINEL

          public static final Object 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 Detail

    - #### DepthFirstIterator

          public DepthFirstIterator(Graph<V,E> g)

      Creates a new depth-first iterator for the specified graph.
      Parameters:
        `g` - the graph to be iterated.

    - #### DepthFirstIterator

          public DepthFirstIterator(Graph<V,E> g,
                            V startVertex)

      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 is `null`, 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 Detail

    - #### isConnectedComponentExhausted

          protected boolean isConnectedComponentExhausted()

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

    - #### encounterVertex

          protected void encounterVertex(V vertex,
                             E edge)

      Description copied from class: `CrossComponentIterator`
      Update data structures the first time we see a vertex.
      Specified by:
        `encounterVertex` in class `CrossComponentIterator<V,E,CrossComponentIterator.VisitColor>`
      Parameters:
        `vertex` - the vertex encountered
        `edge` - the edge via which the vertex was encountered, or null if the vertex is a starting point
      See Also:
        `CrossComponentIterator.encounterVertex(Object, Object)`

    - #### encounterVertexAgain

          protected void encounterVertexAgain(V vertex,
                                  E edge)

      Description copied from class: `CrossComponentIterator`
      Called whenever we re-encounter a vertex. The default implementation does nothing.
      Specified by:
        `encounterVertexAgain` in class `CrossComponentIterator<V,E,CrossComponentIterator.VisitColor>`
      Parameters:
        `vertex` - the vertex re-encountered
        `edge` - the edge via which the vertex was re-encountered
      See Also:
        `CrossComponentIterator.encounterVertexAgain(Object, Object)`

    - #### provideNextVertex

          protected V provideNextVertex()

      Description copied from class: `CrossComponentIterator`
      Returns the vertex to be returned in the following call to the iterator `next` method.
      Specified by:
        `provideNextVertex` in class `CrossComponentIterator<V,E,CrossComponentIterator.VisitColor>`
      Returns:
        the next vertex to be returned by this iterator.
      See Also:
        `CrossComponentIterator.provideNextVertex()`

    - #### getStack

          public Deque<Object> 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

Copyright © 2016. All rights reserved.