V - the graph vertex typeE - the graph edge typepublic class TopologicalOrderIterator<V,E> extends CrossComponentIterator<V,E,Object>
See "Algorithms in Java, Third Edition, Part 5: Graph Algorithms" by Robert Sedgewick and "Data Structures and Algorithms with Object-Oriented Design Patterns in Java" by Bruno R. Preiss for implementation alternatives. The latter can be found online at http://www.brpreiss.com/books/opus5/
For this iterator to work correctly the graph must be acyclic, and must not be modified during
iteration. Currently there are no means to ensure that, nor to fail-fast; the results with cyclic
input (including self-loops) or concurrent modifications are undefined. To precheck a graph for
cycles, consider using CycleDetector or
KosarajuStrongConnectivityInspector.
CrossComponentIterator.VisitColornListeners, reusableEdgeEvent, reusableVertexEvent, specifics| Constructor and Description |
|---|
TopologicalOrderIterator(DirectedGraph<V,E> dg)
Creates a new topological order iterator over the directed graph specified, with arbitrary
tie-breaking in case of partial order.
|
TopologicalOrderIterator(DirectedGraph<V,E> dg,
Queue<V> queue)
Creates a new topological order iterator over the directed graph specified, with a
user-supplied queue implementation to allow customized control over tie-breaking in case of
partial order.
|
| 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.
|
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. |
finishVertex, getGraph, getSeenData, hasNext, isSeenVertex, next, putSeenDataaddTraversalListener, fireConnectedComponentFinished, fireConnectedComponentStarted, fireEdgeTraversed, fireVertexFinished, fireVertexTraversed, isCrossComponentTraversal, isReuseEvents, remove, removeTraversalListener, setCrossComponentTraversal, setReuseEventsclone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitforEachRemainingpublic TopologicalOrderIterator(DirectedGraph<V,E> dg)
dg - the directed graph to be iterated.public TopologicalOrderIterator(DirectedGraph<V,E> dg, Queue<V> queue)
dg - the directed graph to be iterated.queue - queue to use for tie-break in case of partial order (e.g. a PriorityQueue can be
used to break ties according to vertex priority); must be initially emptyprotected boolean isConnectedComponentExhausted()
CrossComponentIteratorisConnectedComponentExhausted in class CrossComponentIterator<V,E,Object>CrossComponentIterator.isConnectedComponentExhausted()protected void encounterVertex(V vertex, E edge)
CrossComponentIteratorencounterVertex in class CrossComponentIterator<V,E,Object>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)
CrossComponentIteratorencounterVertexAgain in class CrossComponentIterator<V,E,Object>vertex - the vertex re-encounterededge - the edge via which the vertex was re-encounteredCrossComponentIterator.encounterVertexAgain(Object, Object)protected V provideNextVertex()
CrossComponentIteratornext
method.provideNextVertex in class CrossComponentIterator<V,E,Object>CrossComponentIterator.provideNextVertex()Copyright © 2017. All rights reserved.