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

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
GRThe type of the digraph the algorithm runs on. The default type is ListDigraph.

#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.
 
 ~Dfs ()
 Destructor.
 
DfspredMap (PredMap &m)
 Sets the map that stores the predecessor arcs.
 
DfsreachedMap (ReachedMap &m)
 Sets the map that indicates which nodes are reached.
 
DfsprocessedMap (ProcessedMap &m)
 Sets the map that indicates which nodes are processed.
 
DfsdistMap (DistMap &m)
 Sets the map that stores the distances of the nodes.
 
Execution Control

The simplest way to execute the DFS algorithm is to use one of the member functions called run().
If you need more control on the execution, first you have to call init(), 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.
 
OutArcIt 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<class ArcBoolMap >
Arc start (const ArcBoolMap &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

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 a node.
 
int dist (Node v) const
 The distance of a node from the root(s).
 
Arc predArc (Node v) const
 Returns the 'previous arc' of the DFS tree for a node.
 
Node predNode (Node v) const
 Returns the 'previous node' of the DFS tree.
 
const DistMapdistMap () const
 Returns a const reference to the node map that stores the distances of the nodes.
 
const PredMappredMap () const
 Returns a const reference to the node map that stores the predecessor arcs.
 
bool reached (Node v) const
 Checks if a node is reached from the root(s).
 

Constructor & Destructor Documentation

Dfs ( const Digraph g)
inline

Constructor.

Parameters
gThe 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
amA 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 compute the DFS path to each node.

The algorithm computes

  • the DFS tree (forest),
  • the distance of each node from the root(s) in the DFS tree.
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 a node.

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 a 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().

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 from 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().

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.

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.