java.lang.Object
org.jgrapht.traverse.AbstractGraphIterator<V,E>
org.jgrapht.traverse.CrossComponentIterator<V,E,org.jheaps.AddressableHeap.Handle<Double,org.jgrapht.traverse.ClosestFirstIterator.QueueEntry<V,E>>>
org.jgrapht.traverse.ClosestFirstIterator<V,E>
 Type Parameters:
V
 the graph vertex typeE
 the graph edge type
 All Implemented Interfaces:
Iterator<V>
,GraphIterator<V,
E>
public class ClosestFirstIterator<V,E>
extends CrossComponentIterator<V,E,org.jheaps.AddressableHeap.Handle<Double,org.jgrapht.traverse.ClosestFirstIterator.QueueEntry<V,E>>>
A closestfirst 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.
The metric for closest here is the weighted path length from a start vertex, i.e. 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. A custom heap implementation can be specified during the construction time. Pairing heap is used by default.
 Author:
 John V. Sichi

Field Summary
Fields inherited from class org.jgrapht.traverse.AbstractGraphIterator
crossComponentTraversal, graph, nListeners, reusableEdgeEvent, reusableVertexEvent, reuseEvents

Constructor Summary
ConstructorDescriptionCreates a new closestfirst iterator for the specified graph.Creates a new radiusbounded closestfirst iterator for the specified graph.ClosestFirstIterator
(Graph<V, E> g, Iterable<V> startVertices, double radius, Supplier<org.jheaps.AddressableHeap<Double, org.jgrapht.traverse.ClosestFirstIterator.QueueEntry<V, E>>> heapSupplier) Creates a new radiusbounded closestfirst iterator for the specified graph.ClosestFirstIterator
(Graph<V, E> g, V startVertex) Creates a new closestfirst iterator for the specified graph.ClosestFirstIterator
(Graph<V, E> g, V startVertex, double radius) Creates a new radiusbounded closestfirst iterator for the specified graph.ClosestFirstIterator
(Graph<V, E> g, V startVertex, double radius, Supplier<org.jheaps.AddressableHeap<Double, org.jgrapht.traverse.ClosestFirstIterator.QueueEntry<V, E>>> heapSupplier) Creates a new radiusbounded closestfirst 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) Override superclass.double
getShortestPathLength
(V vertex) Get the weighted length of the shortest path known to the given vertex.getSpanningTreeEdge
(V vertex) Get the spanning tree edge reaching a vertex which has been seen already in this traversal.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.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
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, 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

Constructor Details

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

ClosestFirstIterator
Creates a new closestfirst iterator for the specified graph. Iteration will start at the specified start vertices and will be limited to the subset of the graph reachable from those vertices. Iteration order is based on minimum distance from any of the start vertices, regardless of the order in which the start vertices are supplied. Because of this, the entire traversal is treated as if it were over a single connected component with respect to events fired. Parameters:
g
 the graph to be iterated.startVertices
 the vertices iteration to be started.

ClosestFirstIterator
Creates a new radiusbounded closestfirst 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 weighted length less than or equal to the specified radius. The specified start vertex may not benull
. Parameters:
g
 the graph to be iterated.startVertex
 the vertex iteration to be started.radius
 limit on weighted path length, or Double.POSITIVE_INFINITY for unbounded search.

ClosestFirstIterator
public ClosestFirstIterator(Graph<V, E> g, V startVertex, double radius, Supplier<org.jheaps.AddressableHeap<Double, org.jgrapht.traverse.ClosestFirstIterator.QueueEntry<V, E>>> heapSupplier) Creates a new radiusbounded closestfirst 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 weighted length less than or equal to the specified radius. The specified start vertex may not benull
. This algorithm will use the heap supplied by theheapSupplier
. Parameters:
g
 the graph to be iterated.startVertex
 the vertex iteration to be started.radius
 limit on weighted path length, or Double.POSITIVE_INFINITY for unbounded search.heapSupplier
 supplier of the preferable heap implementation

ClosestFirstIterator
Creates a new radiusbounded closestfirst iterator for the specified graph. Iteration will start at the specified start vertices and will be limited to the subset of the graph reachable from those vertices via paths of weighted length less than or equal to the specified radius. The specified collection of start vertices may not benull
. Iteration order is based on minimum distance from any of the start vertices, regardless of the order in which the start vertices are supplied. Because of this, the entire traversal is treated as if it were over a single connected component with respect to events fired. Parameters:
g
 the graph to be iterated.startVertices
 the vertices iteration to be started.radius
 limit on weighted path length, or Double.POSITIVE_INFINITY for unbounded search.

ClosestFirstIterator
public ClosestFirstIterator(Graph<V, E> g, Iterable<V> startVertices, double radius, Supplier<org.jheaps.AddressableHeap<Double, org.jgrapht.traverse.ClosestFirstIterator.QueueEntry<V, E>>> heapSupplier) Creates a new radiusbounded closestfirst iterator for the specified graph. Iteration will start at the specified start vertices and will be limited to the subset of the graph reachable from those vertices via paths of weighted length less than or equal to the specified radius. The specified collection of start vertices may not benull
. Iteration order is based on minimum distance from any of the start vertices, regardless of the order in which the start vertices are supplied. Because of this, the entire traversal is treated as if it were over a single connected component with respect to events fired. This algorithm will use the heap supplied by theheapSupplier
. Parameters:
g
 the graph to be iterated.startVertices
 the vertices iteration to be started.radius
 limit on weighted path length, or Double.POSITIVE_INFINITY for unbounded search.heapSupplier
 supplier of the preferable heap implementation


Method Details

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 classAbstractGraphIterator<V,
E>  Parameters:
crossComponentTraversal
 iftrue
traverses across connected components.

getShortestPathLength
Get the weighted 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:
 weighted length of shortest path known, or Double.POSITIVE_INFINITY if no path found yet

getSpanningTreeEdge
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 a start vertex.

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, org.jheaps.AddressableHeap.Handle<Double, 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:

encounterVertex
Description copied from class:CrossComponentIterator
Update data structures the first time we see a vertex. Specified by:
encounterVertex
in classCrossComponentIterator<V,
E, org.jheaps.AddressableHeap.Handle<Double, org.jgrapht.traverse.ClosestFirstIterator.QueueEntry<V, E>>>  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
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 classCrossComponentIterator<V,
E, org.jheaps.AddressableHeap.Handle<Double, org.jgrapht.traverse.ClosestFirstIterator.QueueEntry<V, E>>>  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, org.jheaps.AddressableHeap.Handle<Double, org.jgrapht.traverse.ClosestFirstIterator.QueueEntry<V, E>>>  Returns:
 the next vertex to be returned by this iterator.
 See Also:
