- Type Parameters:
V- the graph vertex typeE- the graph edge type
- All Implemented Interfaces:
Iterator<V>,GraphIterator<V,E>
A topological order is a permutation p of the vertices of a graph such that an edge
(i,j) implies that i appears before j in p. For more information
see wikipedia or
wolfram.
The iterator crosses components but does not track them, it only tracks visited vertices. The
iterator will detect (at some point) if the graph is not a directed acyclic graph and throw a
NotDirectedAcyclicGraphException.
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.
- Author:
- Marden Neubert, Dimitrios Michail
-
Field Summary
Fields inherited from class org.jgrapht.traverse.AbstractGraphIterator
crossComponentTraversal, graph, nListeners, reusableEdgeEvent, reusableVertexEvent, reuseEvents -
Constructor Summary
ConstructorsConstructorDescriptionTopologicalOrderIterator(Graph<V, E> graph) Construct a topological order iterator.TopologicalOrderIterator(Graph<V, E> graph, Comparator<V> comparator) Construct a topological order iterator. -
Method Summary
Modifier and TypeMethodDescriptionbooleanhasNext()booleanTest whether this iterator is set to traverse the graph across connected components.next()voidsetCrossComponentTraversal(boolean crossComponentTraversal) Sets the cross component traversal flag - indicates whether to traverse the graph across connected components.Methods inherited from class org.jgrapht.traverse.AbstractGraphIterator
addTraversalListener, createEdgeTraversalEvent, createVertexTraversalEvent, fireConnectedComponentFinished, fireConnectedComponentStarted, fireEdgeTraversed, fireVertexFinished, fireVertexTraversed, getGraph, isReuseEvents, remove, removeTraversalListener, setReuseEventsMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface java.util.Iterator
forEachRemaining
-
Constructor Details
-
TopologicalOrderIterator
Construct a topological order iterator.Traversal will start at one of the graph's sources. See the definition of source at http://mathworld.wolfram.com/Source.html. In case of partial order, tie-breaking is arbitrary.
- Parameters:
graph- the directed graph to be iterated
-
TopologicalOrderIterator
Construct a topological order iterator.Traversal will start at one of the graph's sources. See the definition of source at http://mathworld.wolfram.com/Source.html. In case of partial order, a comparator is used to break ties.
- Parameters:
graph- the directed graph to be iteratedcomparator- comparator in order to break ties in case of partial order- Throws:
NotDirectedAcyclicGraphException- ifgraphis not a DAG
-
-
Method Details
-
isCrossComponentTraversal
public boolean isCrossComponentTraversal()Description copied from class:AbstractGraphIteratorTest whether this iterator is set to traverse the graph across connected components.- Specified by:
isCrossComponentTraversalin interfaceGraphIterator<V,E> - Overrides:
isCrossComponentTraversalin classAbstractGraphIterator<V,E> - Returns:
truealways, since this iterator does not care about components
-
setCrossComponentTraversal
public void setCrossComponentTraversal(boolean crossComponentTraversal) Description copied from class:AbstractGraphIteratorSets the cross component traversal flag - indicates whether to traverse the graph across connected components.- Overrides:
setCrossComponentTraversalin classAbstractGraphIterator<V,E> - Parameters:
crossComponentTraversal- iftruetraverses across connected components.- Throws:
IllegalArgumentException- if disabling the cross components nature of this iterator is attempted
-
hasNext
public boolean hasNext() -
next
-