Boost Graph Library: Depth-First Visit

## `depth_first_visit`

    template <class IncidenceGraph, class DFSVisitor, class ColorMap>
    void depth_first_visit(IncidenceGraph& g,
      typename graph_traits<IncidenceGraph>::vertex_descriptor s,
      DFSVisitor& vis, ColorMap color)

    template <class IncidenceGraph, class DFSVisitor, class ColorMap,
              class TerminatorFunc>
    void depth_first_visit(IncidenceGraph& g,
      typename graph_traits<IncidenceGraph>::vertex_descriptor s,
      DFSVisitor& vis, ColorMap color, TerminatorFunc func = TerminatorFunc())

This function visits all of the vertices in the same connected component as the source vertex `s`, using the depth-first pattern. The main purpose of the function is for the implementation of `depth_first_search()` though sometimes it is useful on its own.

The `DFSVisitor` supplied by the user determines what actions are taken at each event-point within the algorithm.

The `ColorMap` is used by the algorithm to keep track of which vertices have been visited.

The `func` parameter for the second variant of the algorithm is used to prevent the search to proceed past some vertices. It should be functional object callable with two parameters - the descriptor of vertex and the graph instance - and returing bool.

The call is made immediately after call to 'discover_vertex' visitor event. If `true` is returned, the out edges of the vertex are not examined, as if they don't exist.

The second variant can be used, for example, to find all marked vertices reachable from a start vertex by a path which does not contain any another marked vertices.

### Where Defined:

`boost/graph/depth_first_search.hpp`

### Parameters

IN `IncidenceGraph& g`

> A directed or undirected graph. The graph's type must be a model of Incidence Graph.

IN: `vertex_descriptor s`

> The source vertex from which to start the search.

IN: `DFSVisitor visitor`

> A visitor object that is invoked inside the algorithm at the event-points specified by the DFS Visitor concept. The visitor object is passed by value [1].

UTIL: `ColorMap color`

> This is used by the algorithm to keep track of its progress through the graph. The type `ColorMap` must be a model of Read/Write Property Map and its key type must be the graph's vertex descriptor type and the value type of the color map map must model Color Value.

### Complexity

Time complexity is O(E).

### Notes

[1] Since the visitor parameter is passed by value, if your visitor contains state then any changes to the state during the algorithm will be made to a copy of the visitor object, not the visitor object passed in. Therefore you may want the visitor to hold this state by pointer or reference.

Copyright © 2000-2001 | Jeremy Siek, Indiana University (jsiek@osl.iu.edu)