Class LexBreadthFirstIterator<V,​E>

  • Type Parameters:
    V - the graph vertex type.
    E - the graph edge type.
    All Implemented Interfaces:
    Iterator<V>, GraphIterator<V,​E>

    public class LexBreadthFirstIterator<V,​E>
    extends AbstractGraphIterator<V,​E>
    A lexicographical breadth-first iterator for an undirected graph.

    Every vertex has an implicit label (they aren't used explicitly in order to reduce time and memory complexity). When some vertex is returned by this iterator, its index is the number of vertices in this graph minus number of already returned vertices. For a given vertex v its label is a concatenation of indices of already returned vertices, that were also its neighbours, with some separator between them. For example, 7#4#3 is a valid vertex label.

    Iterator chooses vertex with lexicographically largest label and returns it. It breaks ties arbitrarily. For more information on lexicographical BFS see the following article: Corneil D.G. (2004) Lexicographic Breadth First Search – A Survey. In: Hromkovič J., Nagl M., Westfechtel B. (eds) Graph-Theoretic Concepts in Computer Science. WG 2004. Lecture Notes in Computer Science, vol 3353. Springer, Berlin, Heidelberg; and the following paper:CS 762: Graph-theoretic algorithms. Lecture notes of a graduate course. University of Waterloo.

    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.

    Note: only vertex events are fired by this iterator.

    Author:
    Timofey Chudakov
    • Constructor Detail

      • LexBreadthFirstIterator

        public LexBreadthFirstIterator​(Graph<V,​E> graph)
        Creates new lexicographical breadth-first iterator for graph.
        Parameters:
        graph - the graph to be iterated.
        Throws:
        IllegalArgumentException - if argument is not an undirected graph
        NullPointerException - if argument is null
    • Method Detail

      • hasNext

        public boolean hasNext()
        Checks whether there exist unvisited vertices.
        Returns:
        true if there exist unvisited vertices.
      • next

        public V next()
        Returns the next vertex in the ordering.
        Returns:
        the next vertex in the ordering.
      • setCrossComponentTraversal

        public void setCrossComponentTraversal​(boolean crossComponentTraversal)
        Description copied from class: AbstractGraphIterator
        Sets the cross component traversal flag - indicates whether to traverse the graph across connected components.
        Overrides:
        setCrossComponentTraversal in class AbstractGraphIterator<V,​E>
        Parameters:
        crossComponentTraversal - if true traverses across connected components.
        Throws:
        IllegalArgumentException - if disabling the cross components nature of this iterator is attempted