Overview | Package | Class | Tree | Deprecated | Index | Help
PREV CLASS NEXT CLASS | FRAMES NO FRAMES
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD

## org.jgrapht.traverse
Class ClosestFirstIterator<V,E>

    java.lang.Object
      org.jgrapht.traverse.AbstractGraphIterator<V,E>
          org.jgrapht.traverse.CrossComponentIterator<V,E,FibonacciHeapNode<org.jgrapht.traverse.ClosestFirstIterator.QueueEntry<V,E>>>
              org.jgrapht.traverse.ClosestFirstIterator<V,E>

All Implemented Interfaces:
  java.util.Iterator<V>, GraphIterator<V,E>

    public class ClosestFirstIterator<V,E>

extends CrossComponentIterator<V,E,FibonacciHeapNode<org.jgrapht.traverse.ClosestFirstIterator.QueueEntry<V,E>>>

A closest-first 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 fail-fast. The results of such modifications are undefined.

The metric for closest here is the path length from a start vertex. Graph.getEdgeWeight(Edge) is summed to calculate path length. Negative edge weights will result in an IllegalArgumentException. Optionally, path length may be bounded by a finite radius.

Since:
  Sep 2, 2003
Author:
  John V. Sichi

Constructor Summary
`ClosestFirstIterator(Graph<V,E> g)` Creates a new closest-first iterator for the specified graph.
`ClosestFirstIterator(Graph<V,E> g, V startVertex)` Creates a new closest-first iterator for the specified graph.
`ClosestFirstIterator(Graph<V,E> g, V startVertex, double radius)` Creates a new radius-bounded closest-first iterator for the specified graph.

Method Summary
`protected void` | `encounterVertex(V vertex, E edge)` Update data structures the first time we see a vertex.
`protected void` | `encounterVertexAgain(V vertex, E edge)` Override superclass.
`double` | `getShortestPathLength(V vertex)` Get the length of the shortest path known to the given vertex.
`E` | `getSpanningTreeEdge(V vertex)` Get the spanning tree edge reaching a vertex which has been seen already in this traversal.
`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.
`void` | `setCrossComponentTraversal(boolean crossComponentTraversal)` Sets the cross component traversal flag - indicates whether to traverse the graph across connected components.

Methods inherited from class org.jgrapht.traverse.CrossComponentIterator
`getGraph, getSeenData, hasNext, isSeenVertex, next, putSeenData`

Methods inherited from class org.jgrapht.traverse.AbstractGraphIterator
`addTraversalListener, fireConnectedComponentFinished, fireConnectedComponentStarted, fireEdgeTraversed, fireVertexTraversed, isCrossComponentTraversal, isReuseEvents, remove, removeTraversalListener, setReuseEvents`

Methods inherited from class java.lang.Object
`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

Constructor Detail

### ClosestFirstIterator

    public ClosestFirstIterator(Graph<V,E> g)

  Creates a new closest-first iterator for the specified graph.

  Parameters:
    `g` - the graph to be iterated.

### ClosestFirstIterator

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

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

### ClosestFirstIterator

    public ClosestFirstIterator(Graph<V,E> g,
                                V startVertex,
                                double radius)

  Creates a new radius-bounded closest-first iterator for the specified graph. Iteration will start at the specified start vertex and will be limited to the subset of the connected component which includes that vertex and is reachable via paths of length less than or equal to the specified radius. The specified start vertex may not be `null`.

  Parameters:
    `g` - the graph to be iterated.
    `startVertex` - the vertex iteration to be started.
    `radius` - limit on path length, or Double.POSITIVE_INFINITY for unbounded search.

Method Detail

### setCrossComponentTraversal

    public void setCrossComponentTraversal(boolean crossComponentTraversal)

  Description copied from class: `AbstractGraphIterator`
  Sets the cross component traversal flag - indicates whether to traverse the graph across connected components.

  Overrides:
    `setCrossComponentTraversal` in class `AbstractGraphIterator<V,E>`
  Parameters:
    `crossComponentTraversal` - if `true` traverses across connected components.

### getShortestPathLength

    public double getShortestPathLength(V vertex)

  Get the length of the shortest path known to the given vertex. If the vertex has already been visited, then it is truly the shortest path length; otherwise, it is the best known upper bound.

  Parameters:
    `vertex` - vertex being sought from start vertex
  Returns:
    length of shortest path known, or Double.POSITIVE_INFINITY if no path found yet

### getSpanningTreeEdge

    public E getSpanningTreeEdge(V vertex)

  Get the spanning tree edge reaching a vertex which has been seen already in this traversal. This edge is the last link in the shortest known path between the start vertex and the requested vertex. If the vertex has already been visited, then it is truly the minimum spanning tree edge; otherwise, it is the best candidate seen so far.

  Parameters:
    `vertex` - the spanned vertex.
  Returns:
    the spanning tree edge, or null if the vertex either has not been seen yet or is the start vertex.

### 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,FibonacciHeapNode<org.jgrapht.traverse.ClosestFirstIterator.QueueEntry<V,E>>>`
  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,FibonacciHeapNode<org.jgrapht.traverse.ClosestFirstIterator.QueueEntry<V,E>>>`
  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)

  Override superclass. When we see a vertex again, we need to see if the new edge provides a shorter path than the old edge.

  Specified by:
    `encounterVertexAgain` in class `CrossComponentIterator<V,E,FibonacciHeapNode<org.jgrapht.traverse.ClosestFirstIterator.QueueEntry<V,E>>>`
  Parameters:
    `vertex` - the vertex re-encountered
    `edge` - the edge via which the vertex was re-encountered

### 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,FibonacciHeapNode<org.jgrapht.traverse.ClosestFirstIterator.QueueEntry<V,E>>>`
  Returns:
    the next vertex to be returned by this iterator.
  See Also:
    `CrossComponentIterator.provideNextVertex()`

Overview | Package | Class | Tree | Deprecated | Index | Help
PREV CLASS NEXT CLASS | FRAMES NO FRAMES
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD