V
- the graph vertex typeE
- the graph edge typepublic class ClosestFirstIterator<V,E> extends CrossComponentIterator<V,E,org.jheaps.AddressableHeap.Handle<Double,org.jgrapht.traverse.ClosestFirstIterator.QueueEntry<V,E>>>
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.
crossComponentTraversal, graph, nListeners, reusableEdgeEvent, reusableVertexEvent, reuseEvents
Constructor and Description |
---|
ClosestFirstIterator(Graph<V,E> g,
Iterable<V> startVertices)
Creates a new closest-first iterator for the specified graph.
|
ClosestFirstIterator(Graph<V,E> g,
Iterable<V> startVertices,
double radius)
Creates a new radius-bounded closest-first 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 radius-bounded 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.
|
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 radius-bounded closest-first iterator for the specified graph.
|
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)
Override superclass.
|
double |
getShortestPathLength(V vertex)
Get the weighted 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.
|
finishVertex, getEntireGraphVertexIterator, getSeenData, hasNext, isSeenVertex, next, putSeenData
addTraversalListener, createEdgeTraversalEvent, createVertexTraversalEvent, fireConnectedComponentFinished, fireConnectedComponentStarted, fireEdgeTraversed, fireVertexFinished, fireVertexTraversed, getGraph, isCrossComponentTraversal, isReuseEvents, remove, removeTraversalListener, setReuseEvents
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
forEachRemaining
public ClosestFirstIterator(Graph<V,E> g, V startVertex)
null
, iteration will start at an
arbitrary vertex and will not be limited, that is, will be able to traverse all the graph.g
- the graph to be iterated.startVertex
- the vertex iteration to be started.public ClosestFirstIterator(Graph<V,E> g, Iterable<V> startVertices)
g
- the graph to be iterated.startVertices
- the vertices iteration to be started.public ClosestFirstIterator(Graph<V,E> g, V startVertex, double radius)
null
.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.public ClosestFirstIterator(Graph<V,E> g, V startVertex, double radius, Supplier<org.jheaps.AddressableHeap<Double,org.jgrapht.traverse.ClosestFirstIterator.QueueEntry<V,E>>> heapSupplier)
null
. This algorithm will use the heap supplied by the heapSupplier
.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 implementationpublic ClosestFirstIterator(Graph<V,E> g, Iterable<V> startVertices, double radius)
null
.
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.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.public ClosestFirstIterator(Graph<V,E> g, Iterable<V> startVertices, double radius, Supplier<org.jheaps.AddressableHeap<Double,org.jgrapht.traverse.ClosestFirstIterator.QueueEntry<V,E>>> heapSupplier)
null
.
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 the heapSupplier
.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 implementationpublic void setCrossComponentTraversal(boolean crossComponentTraversal)
AbstractGraphIterator
setCrossComponentTraversal
in class AbstractGraphIterator<V,E>
crossComponentTraversal
- if true
traverses across connected components.public double getShortestPathLength(V vertex)
vertex
- vertex being sought from start vertexpublic E getSpanningTreeEdge(V vertex)
vertex
- the spanned vertex.protected boolean isConnectedComponentExhausted()
CrossComponentIterator
isConnectedComponentExhausted
in class CrossComponentIterator<V,E,org.jheaps.AddressableHeap.Handle<Double,org.jgrapht.traverse.ClosestFirstIterator.QueueEntry<V,E>>>
CrossComponentIterator.isConnectedComponentExhausted()
protected void encounterVertex(V vertex, E edge)
CrossComponentIterator
encounterVertex
in class CrossComponentIterator<V,E,org.jheaps.AddressableHeap.Handle<Double,org.jgrapht.traverse.ClosestFirstIterator.QueueEntry<V,E>>>
vertex
- the vertex encounterededge
- the edge via which the vertex was encountered, or null if the vertex is a
starting pointCrossComponentIterator.encounterVertex(Object, Object)
protected void encounterVertexAgain(V vertex, E edge)
encounterVertexAgain
in class CrossComponentIterator<V,E,org.jheaps.AddressableHeap.Handle<Double,org.jgrapht.traverse.ClosestFirstIterator.QueueEntry<V,E>>>
vertex
- the vertex re-encounterededge
- the edge via which the vertex was re-encounteredprotected V provideNextVertex()
CrossComponentIterator
next
method.provideNextVertex
in class CrossComponentIterator<V,E,org.jheaps.AddressableHeap.Handle<Double,org.jgrapht.traverse.ClosestFirstIterator.QueueEntry<V,E>>>
CrossComponentIterator.provideNextVertex()
Copyright © 2019. All rights reserved.