template<typename GR, typename VS, typename TR>
class lemon::DfsVisit< GR, VS, TR >
This class provides an efficient implementation of the DFS algorithm with visitor interface.
The DfsVisit class provides an alternative interface to the Dfs class. It works with callback mechanism, the DfsVisit object calls the member functions of the Visitor
class on every DFS event.
This interface of the DFS algorithm should be used in special cases when extra actions have to be performed in connection with certain events of the DFS algorithm. Otherwise consider to use Dfs or dfs() instead.
- Template Parameters
-
GR | The type of the digraph the algorithm runs on. The default type is ListDigraph. The value of GR is not used directly by DfsVisit, it is only passed to DfsVisitDefaultTraits. |
VS | The Visitor type that is used by the algorithm. DfsVisitor<GR> is an empty visitor, which does not observe the DFS events. If you want to observe the DFS events, you should implement your own visitor class. |
TR | The traits class that defines various types used by the algorithm. By default, it is DfsVisitDefaultTraits<GR>. In most cases, this parameter should not be set directly, consider to use the named template parameters instead. |
|
| DfsVisit (const Digraph &digraph, Visitor &visitor) |
| Constructor.
|
|
| ~DfsVisit () |
| Destructor.
|
|
DfsVisit & | reachedMap (ReachedMap &m) |
| Sets the map that indicates which nodes are reached.
|
|
|
The simplest way to execute the DFS algorithm is to use one of the member functions called run().
If you need better control on the execution, you have to call init() first, then you can add a source node with addSource() and perform the actual computation with start(). This procedure can be repeated if there are nodes that have not been reached.
|
void | init () |
|
void | addSource (Node s) |
| Adds a new source node.
|
|
Arc | processNextArc () |
| Processes the next arc.
|
|
Arc | nextArc () const |
| Next arc to be processed.
|
|
bool | emptyQueue () const |
| Returns false if there are nodes to be processed.
|
|
int | queueSize () const |
| Returns the number of the nodes to be processed.
|
|
void | start () |
| Executes the algorithm.
|
|
void | start (Node t) |
| Executes the algorithm until the given target node is reached.
|
|
template<typename AM > |
Arc | start (const AM &am) |
| Executes the algorithm until a condition is met.
|
|
void | run (Node s) |
| Runs the algorithm from the given source node.
|
|
bool | run (Node s, Node t) |
| Finds the DFS path between s and t .
|
|
void | run () |
| Runs the algorithm to visit all nodes in the digraph.
|
|
|
The results of the DFS algorithm can be obtained using these functions.
Either run() or start() should be called before using them.
|
bool | reached (Node v) const |
| Checks if the given node is reached from the root(s).
|
|