- Main Page
- Modules
- Classes
- Namespaces
- Files
- Related Pages

- Class List
- Class Index
- Class Hierarchy
- Class Members

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
List of all members | Classes | Public Types | Public Member Functions
Dfs< GR, TR > Class Template Reference
Graph Search

## Detailed Description

### template<typename GR, typename TR>
class lemon::Dfs< GR, TR >

This class provides an efficient implementation of the DFS algorithm.

There is also a function-type interface for the DFS algorithm, which is convenient in the simplier cases and it can be used easier.

Template Parameters

  GR | The type of the digraph the algorithm runs on. The default type is ListDigraph.
  TR | The traits class that defines various types used by the algorithm. By default, it is DfsDefaultTraits<GR>. In most cases, this parameter should not be set directly, consider to use the named template parameters instead.

`#include <lemon/dfs.h>`

## Classes
struct | SetDistMap
| Named parameter for setting `DistMap` type. More...
struct | SetPredMap
| Named parameter for setting `PredMap` type. More...
struct | SetProcessedMap
| Named parameter for setting `ProcessedMap` type. More...
struct | SetReachedMap
| Named parameter for setting `ReachedMap` type. More...
struct | SetStandardProcessedMap
| Named parameter for setting `ProcessedMap` type to be `Digraph::NodeMap<bool>`. More...

## Public Types
typedef TR::Digraph | Digraph
| The type of the digraph the algorithm runs on.
typedef TR::PredMap | PredMap
| The type of the map that stores the predecessor arcs of the DFS paths.
typedef TR::DistMap | DistMap
| The type of the map that stores the distances of the nodes.
typedef TR::ReachedMap | ReachedMap
| The type of the map that indicates which nodes are reached.
typedef TR::ProcessedMap | ProcessedMap
| The type of the map that indicates which nodes are processed.
typedef PredMapPath< Digraph, PredMap > | Path
| The type of the paths.
typedef TR | Traits
| The traits class of the algorithm.

## Public Member Functions
| Dfs (const Digraph &g)
| Constructor. More...
| ~Dfs ()
| Destructor.
Dfs & | predMap (PredMap &m)
| Sets the map that stores the predecessor arcs. More...
Dfs & | reachedMap (ReachedMap &m)
| Sets the map that indicates which nodes are reached. More...
Dfs & | processedMap (ProcessedMap &m)
| Sets the map that indicates which nodes are processed. More...
Dfs & | distMap (DistMap &m)
| Sets the map that stores the distances of the nodes. More...
Execution Control
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 ()
| Initializes the internal data structures. More...
void | addSource (Node s)
| Adds a new source node. More...
Arc | processNextArc ()
| Processes the next arc. More...
OutArcIt | nextArc () const
| Next arc to be processed. More...
bool | emptyQueue () const
| Returns `false` if there are nodes to be processed. More...
int | queueSize () const
| Returns the number of the nodes to be processed. More...
void | start ()
| Executes the algorithm. More...
void | start (Node t)
| Executes the algorithm until the given target node is reached. More...
template<class ArcBoolMap >
Arc | start (const ArcBoolMap &am)
| Executes the algorithm until a condition is met. More...
void | run (Node s)
| Runs the algorithm from the given source node. More...
bool | run (Node s, Node t)
| Finds the DFS path between `s` and `t`. More...
void | run ()
| Runs the algorithm to visit all nodes in the digraph. More...
Query Functions
The results of the DFS algorithm can be obtained using these functions. Either run() or start() should be called before using them.
Path | path (Node t) const
| The DFS path to the given node. More...
int | dist (Node v) const
| The distance of the given node from the root(s). More...
Arc | predArc (Node v) const
| Returns the 'previous arc' of the DFS tree for the given node. More...
Node | predNode (Node v) const
| Returns the 'previous node' of the DFS tree for the given node. More...
const DistMap & | distMap () const
| Returns a const reference to the node map that stores the distances of the nodes. More...
const PredMap & | predMap () const
| Returns a const reference to the node map that stores the predecessor arcs. More...
bool | reached (Node v) const
| Checks if the given node. node is reached from the root(s). More...

## Constructor & Destructor Documentation

Dfs | ( | const Digraph & | g | ) |
| inline

Constructor.

Parameters

  g | The digraph the algorithm runs on.

## Member Function Documentation

Dfs& predMap | ( | PredMap & | m | ) |
| inline

Sets the map that stores the predecessor arcs. If you don't use this function before calling run() or init(), an instance will be allocated automatically. The destructor deallocates this automatically allocated map, of course.

Returns
  `(*this)`

Dfs& reachedMap | ( | ReachedMap & | m | ) |
| inline

Sets the map that indicates which nodes are reached. If you don't use this function before calling run() or init(), an instance will be allocated automatically. The destructor deallocates this automatically allocated map, of course.

Returns
  `(*this)`

Dfs& processedMap | ( | ProcessedMap & | m | ) |
| inline

Sets the map that indicates which nodes are processed. If you don't use this function before calling run() or init(), an instance will be allocated automatically. The destructor deallocates this automatically allocated map, of course.

Returns
  `(*this)`

Dfs& distMap | ( | DistMap & | m | ) |
| inline

Sets the map that stores the distances of the nodes calculated by the algorithm. If you don't use this function before calling run() or init(), an instance will be allocated automatically. The destructor deallocates this automatically allocated map, of course.

Returns
  `(*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.

Precondition
  The stack must be empty. Otherwise the algorithm gives wrong results. (One of the outgoing arcs of all the source nodes except for the last one will not be visited and distances will also be wrong.)

Arc processNextArc | ( |  | ) |
| inline

Processes the next arc.

Returns
  The processed arc.

Precondition
  The stack must not be empty.

OutArcIt nextArc | ( |  | ) | const
| inline

Next arc to be processed.

Returns
  The next arc to be processed or `INVALID` if the stack is empty.

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

- the DFS tree,
- the distance of each node from the root in the DFS tree.

Precondition
  init() must be called and a root node should be added with addSource() before using this function.

Note
  `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

- the DFS path to `t`,
- the distance of `t` from the root in the DFS tree.

Precondition
  init() must be called and a root node should be added with addSource() before using this function.

Arc start | ( | const ArcBoolMap & | 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.

Parameters

  am | A `bool` (or convertible) arc map. The algorithm will stop when it reaches an arc `a` with `am[a]` true.

Returns
  The reached arc `a` with `am[a]` true or `INVALID` if no such arc was found.

Precondition
  init() must be called and a root node should be added with addSource() before using this function.

Warning
  Contrary to Bfs and Dijkstra, `am` is an arc map, not a node map.

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

- the DFS tree,
- the distance of each node from the root in the DFS tree.

Note
  `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)

Returns
  `true` if `t` is reachable form `s`.

Note
  Apart from the return value, `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 visit all nodes in the digraph.

Note
  `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();
  * }
  * }
  *

Path path | ( | Node | t | ) | const
| inline

Returns the DFS path to the given node from the root(s).

Warning
  `t` should be reached from the root(s).

Precondition
  Either run() or init() must be called before using this function.

int dist | ( | Node | v | ) | const
| inline

Returns the distance of the given node from the root(s).

Warning
  If node `v` is not reached from the root(s), then the return value of this function is undefined.

Precondition
  Either run() or init() must be called before using this function.

Arc predArc | ( | Node | v | ) | const
| inline

This function returns the 'previous arc' of the DFS tree for the node `v`, i.e. it returns the last arc of a DFS path from a root to `v`. It is `INVALID` if `v` is not reached from the root(s) or if `v` is a root.

The DFS tree used here is equal to the DFS tree used in predNode() and predMap().

Precondition
  Either run() or init() must be called before using this function.

Node predNode | ( | Node | v | ) | const
| inline

This function returns the 'previous node' of the DFS tree for the node `v`, i.e. it returns the last but one node of a DFS path from a root to `v`. It is `INVALID` if `v` is not reached from the root(s) or if `v` is a root.

The DFS tree used here is equal to the DFS tree used in predArc() and predMap().

Precondition
  Either run() or init() must be called before using this function.

const DistMap& distMap | ( |  | ) | const
| inline

Returns a const reference to the node map that stores the distances of the nodes calculated by the algorithm.

Precondition
  Either run() or init() must be called before using this function.

const PredMap& predMap | ( |  | ) | const
| inline

Returns a const reference to the node map that stores the predecessor arcs, which form the DFS tree (forest).

Precondition
  Either run() or init() must be called before using this function.

bool reached | ( | Node | v | ) | const
| inline

Returns `true` if `v` is reached from the root(s).

Precondition
  Either run() or init() must be called before using this function.