#include <lemon/dfs.h>
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.
_Digraph | The type of the digraph the algorithm runs on. The default value is ListDigraph. The value of _Digraph is not used directly by DfsVisit, it is only passed to DfsVisitDefaultTraits. | |
_Visitor | The Visitor type that is used by the algorithm. DfsVisitor<_Digraph> 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. | |
_Traits | Traits class to set various data types used by the algorithm. The default traits class is DfsVisitDefaultTraits<_Digraph>. See DfsVisitDefaultTraits for the documentation of a DFS visit traits class. |
Public Types | |
typedef _Traits | Traits |
The traits class. | |
typedef Traits::Digraph | Digraph |
The type of the digraph the algorithm runs on. | |
typedef _Visitor | Visitor |
The visitor type used by the algorithm. | |
typedef Traits::ReachedMap | ReachedMap |
The type of the map that indicates which nodes are reached. | |
Public Member Functions | |
DfsVisit (const Digraph &digraph, Visitor &visitor) | |
Constructor. | |
~DfsVisit () | |
Destructor. | |
DfsVisit & | reachedMap (ReachedMap &m) |
Sets the map that indicates which nodes are reached. | |
Execution control | |
The simplest way to execute the algorithm is to use one of the member functions called run(). If you need more control on the execution, first you must call init(), then you can add several source nodes with addSource(). Finally start() will perform the actual path computation. | |
void | init () |
Initializes the internal data structures. | |
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. | |
Query Functions | |
bool | reached (Node v) |
Checks if a node is reachable from the root(s). | |
Classes | |
struct | SetReachedMap |
Named parameter for setting ReachedMap type. More... |
Constructor.
digraph | The digraph the algorithm runs on. | |
visitor | The visitor object of the algorithm. |
DfsVisit& reachedMap | ( | ReachedMap & | m | ) | [inline] |
Sets the map that indicates which nodes are reached. If you don't use this function before calling run(), it will allocate one. The destructor deallocates this automatically allocated map, of course.
(*this)
void init | ( | ) | [inline] |
Initializes the internal data structures.
void addSource | ( | Node | s | ) | [inline] |
Adds a new source node to the set of nodes to be processed.
Arc processNextArc | ( | ) | [inline] |
Processes the next arc.
Arc nextArc | ( | ) | const [inline] |
Next arc to be processed.
bool emptyQueue | ( | ) | const [inline] |
Returns false
if there are nodes to be processed in the queue (stack).
int queueSize | ( | ) | const [inline] |
Returns the number of the nodes to be processed in the queue (stack).
void start | ( | ) | [inline] |
Executes the algorithm.
This method runs the DFS algorithm from the root node in order to compute the DFS path to each node.
The algorithm computes
d.start()
is just a shortcut of the following code. while ( !d.emptyQueue() ) {
d.processNextArc();
}
void start | ( | Node | t | ) | [inline] |
Executes the algorithm until the given target node is reached.
This method runs the DFS algorithm from the root node in order to compute the DFS path to t
.
The algorithm computes
t
,t
from the root in the DFS tree.
Arc start | ( | const AM & | am | ) | [inline] |
Executes the algorithm until a condition is met.
This method runs the DFS algorithm from the root node until an arc a
with am[a]
true is found.
am | A bool (or convertible) arc map. The algorithm will stop when it reaches an arc a with am[a] true. |
a
with am[a]
true or INVALID
if no such arc was found.void run | ( | Node | s | ) | [inline] |
This method runs the DFS algorithm from node s
. in order to compute the DFS path to each node.
The algorithm computes
d.run(s)
is just a shortcut of the following code. d.init(); d.addSource(s); d.start();
bool run | ( | Node | s, | |
Node | t | |||
) | [inline] |
This method runs the DFS algorithm from node s
in order to compute the DFS path to node t
(it stops searching when t
is processed).
true
if t
is reachable form s
.d.run(s,t)
is just a shortcut of the following code. d.init(); d.addSource(s); d.start(t);
void run | ( | ) | [inline] |
This method runs the DFS algorithm in order to compute the DFS path to each node.
The algorithm computes
d.run()
is just a shortcut of the following code. d.init(); for (NodeIt n(digraph); n != INVALID; ++n) { if (!d.reached(n)) { d.addSource(n); d.start(); } }
bool reached | ( | Node | v | ) | [inline] |