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 value is ListDigraph. The value of GR is not used directly by Dfs, it is only passed to DfsDefaultTraits.
TR Traits class to set various data types used by the algorithm. The default traits class is DfsDefaultTraits<GR>. See DfsDefaultTraits for the documentation of a Dfs traits class.
#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.

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 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 a source node with addSource(). Finally start() will perform the actual path computation.

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 result of the DFS algorithm can be obtained using these functions.
Either run() or start() must 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.
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 reachable from the root(s).


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(), it will allocate one. 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(), it will allocate one. 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(), it will allocate one. 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(), it will allocate one. 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 false results.)
Warning:
Distances will be wrong (or at least strange) in case of multiple sources.

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 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() 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 reachable from the root.
Precondition:
Either run() or start() must be called before using this function.

int dist ( Node  v  )  const [inline]

Returns the distance of a node from the root.

Warning:
If node v is not reachable from the root, then the return value of this function is undefined.
Precondition:
Either run() or start() 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 the root to v. It is INVALID if v is not reachable 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 start() 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 the root to v. It is INVALID if v is not reachable 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 start() 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 reachable from the root(s).

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


The documentation for this class was generated from the following file:

Generated on Thu Mar 26 21:26:07 2009 for LEMON by  doxygen 1.5.8