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>

List of all members.

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.
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines