java.lang.Object
org.jgrapht.traverse.AbstractGraphIterator<V,E>
org.jgrapht.traverse.CrossComponentIterator<V,E,BreadthFirstIterator.SearchNodeData<E>>
org.jgrapht.traverse.BreadthFirstIterator<V,E>
- Type Parameters:
V
- the graph vertex typeE
- the graph edge type
- All Implemented Interfaces:
Iterator<V>
,GraphIterator<V,
E>
public class BreadthFirstIterator<V,E>
extends CrossComponentIterator<V,E,BreadthFirstIterator.SearchNodeData<E>>
A breadth-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.
- Author:
- Barak Naveh
-
Nested Class Summary
Modifier and TypeClassDescriptionprotected static class
Data kept for discovered vertices. -
Field Summary
Fields inherited from class org.jgrapht.traverse.AbstractGraphIterator
crossComponentTraversal, graph, nListeners, reusableEdgeEvent, reusableVertexEvent, reuseEvents
-
Constructor Summary
ConstructorDescriptionBreadthFirstIterator
(Graph<V, E> g) Creates a new breadth-first iterator for the specified graph.Creates a new breadth-first iterator for the specified graph.BreadthFirstIterator
(Graph<V, E> g, V startVertex) Creates a new breadth-first 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) Called whenever we re-encounter a vertex.int
Returns the depth of vertex $v$ in the search tree.Returns the parent node of vertex $v$ in the BFS search tree, or null if $v$ is the root node.Returns the edge connecting vertex $v$ to its parent in the spanning tree formed by the BFS search, or null if $v$ is a root node.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.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, setCrossComponentTraversal, 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
-
BreadthFirstIterator
Creates a new breadth-first iterator for the specified graph.- Parameters:
g
- the graph to be iterated.
-
BreadthFirstIterator
Creates a new breadth-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 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.
-
BreadthFirstIterator
Creates a new breadth-first iterator for the specified graph. Iteration will start at the specified start vertices and will be limited to the connected component that includes those vertices. If the specified start vertices 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.startVertices
- the vertices iteration to be started.
-
-
Method Details
-
isConnectedComponentExhausted
protected boolean isConnectedComponentExhausted()Returnstrue
if there are no more uniterated vertices in the currently iterated connected component;false
otherwise.- Specified by:
isConnectedComponentExhausted
in classCrossComponentIterator<V,
E, BreadthFirstIterator.SearchNodeData<E>> - Returns:
true
if there are no more uniterated vertices in the currently iterated connected component;false
otherwise.
-
encounterVertex
Update data structures the first time we see a vertex.- Specified by:
encounterVertex
in classCrossComponentIterator<V,
E, BreadthFirstIterator.SearchNodeData<E>> - Parameters:
vertex
- the vertex encounterededge
- the edge via which the vertex was encountered, or null if the vertex is a starting point
-
encounterVertexAgain
Called whenever we re-encounter a vertex. The default implementation does nothing.- Specified by:
encounterVertexAgain
in classCrossComponentIterator<V,
E, BreadthFirstIterator.SearchNodeData<E>> - Parameters:
vertex
- the vertex re-encounterededge
- the edge via which the vertex was re-encountered
-
getParent
Returns the parent node of vertex $v$ in the BFS search tree, or null if $v$ is the root node. This method can only be invoked on a vertex $v$ once the iterator has visited vertex $v$!- Parameters:
v
- vertex- Returns:
- parent node of vertex $v$ in the BFS search tree, or null if $v$ is a root node
-
getSpanningTreeEdge
Returns the edge connecting vertex $v$ to its parent in the spanning tree formed by the BFS search, or null if $v$ is a root node. This method can only be invoked on a vertex $v$ once the iterator has visited vertex $v$!- Parameters:
v
- vertex- Returns:
- edge connecting vertex $v$ in the BFS search tree to its parent, or null if $v$ is a root node
-
getDepth
Returns the depth of vertex $v$ in the search tree. The depth of a vertex $v$ is defined as the number of edges traversed on the path from the root of the BFS tree to vertex $v$. The root of the search tree has depth 0. This method can only be invoked on a vertex $v$ once the iterator has visited vertex $v$!- Parameters:
v
- vertex- Returns:
- depth of vertex $v$ in the search tree
-
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, BreadthFirstIterator.SearchNodeData<E>> - Returns:
- the next vertex to be returned by this iterator.
- See Also:
-