Class BreadthFirstIterator<V,​E>

  • Type Parameters:
    V - the graph vertex type
    E - the graph edge type
    All Implemented Interfaces:
    java.util.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
    • Constructor Detail

      • BreadthFirstIterator

        public BreadthFirstIterator​(Graph<V,​E> g)
        Creates a new breadth-first iterator for the specified graph.
        Parameters:
        g - the graph to be iterated.
      • BreadthFirstIterator

        public BreadthFirstIterator​(Graph<V,​E> g,
                                    V startVertex)
        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 is null, 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

        public BreadthFirstIterator​(Graph<V,​E> g,
                                    java.lang.Iterable<V> startVertices)
        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 is null, 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 Detail

      • isConnectedComponentExhausted

        protected boolean isConnectedComponentExhausted()
        Returns true if there are no more uniterated vertices in the currently iterated connected component; false otherwise.
        Specified by:
        isConnectedComponentExhausted in class CrossComponentIterator<V,​E,​BreadthFirstIterator.SearchNodeData<E>>
        Returns:
        true if there are no more uniterated vertices in the currently iterated connected component; false otherwise.
      • getParent

        public V getParent​(V v)
        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

        public E getSpanningTreeEdge​(V v)
        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

        public int getDepth​(V v)
        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