Bfs Class Template Reference
[Graph Search]

#include <lemon/bfs.h>

Inheritance diagram for Bfs:

Inheritance graph
[legend]

List of all members.


Detailed Description

template<typename GR, typename TR>
class lemon::Bfs< GR, TR >

This class provides an efficient implementation of the BFS algorithm.

There is also a function-type interface for the BFS 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 Bfs, it is only passed to BfsDefaultTraits.
TR Traits class to set various data types used by the algorithm. The default traits class is BfsDefaultTraits<GR>. See BfsDefaultTraits for the documentation of a Bfs traits class.

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 shortest 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

 Bfs (const Digraph &g)
 Constructor.
 ~Bfs ()
 Destructor.
BfspredMap (PredMap &m)
 Sets the map that stores the predecessor arcs.
BfsreachedMap (ReachedMap &m)
 Sets the map that indicates which nodes are reached.
BfsprocessedMap (ProcessedMap &m)
 Sets the map that indicates which nodes are processed.
BfsdistMap (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 several source nodes with addSource(). Finally start() will perform the actual path computation.

void init ()
void addSource (Node s)
 Adds a new source node.
Node processNextNode ()
 Processes the next node.
Node processNextNode (Node target, bool &reach)
 Processes the next node.
template<class NM>
Node processNextNode (const NM &nm, Node &rnode)
 Processes the next node.
Node nextNode () const
 The next node 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 NodeBoolMap>
Node start (const NodeBoolMap &nm)
 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 shortest path between s and t.
void run ()
 Runs the algorithm to visit all nodes in the digraph.
Query Functions
The result of the BFS algorithm can be obtained using these functions.
Either run() or start() must be called before using them.

Path path (Node t) const
 The shortest 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 shortest path tree for a node.
Node predNode (Node v) const
 Returns the 'previous node' of the shortest path tree for a node.
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).

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...

Constructor & Destructor Documentation

Bfs ( const Digraph g  )  [inline]

Constructor.

Parameters:
g The digraph the algorithm runs on.


Member Function Documentation

Bfs& 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)

Bfs& 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)

Bfs& 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)

Bfs& 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.

Node processNextNode (  )  [inline]

Processes the next node.

Returns:
The processed node.
Precondition:
The queue must not be empty.

Node processNextNode ( Node  target,
bool &  reach 
) [inline]

Processes the next node and checks if the given target node is reached. If the target node is reachable from the processed node, then the reach parameter will be set to true.

Parameters:
target The target node.
Return values:
reach Indicates if the target node is reached. It should be initially false.
Returns:
The processed node.
Precondition:
The queue must not be empty.

Node processNextNode ( const NM &  nm,
Node &  rnode 
) [inline]

Processes the next node and checks if at least one of reached nodes has true value in the nm node map. If one node with true value is reachable from the processed node, then the rnode parameter will be set to the first of such nodes.

Parameters:
nm A bool (or convertible) node map that indicates the possible targets.
Return values:
rnode The reached target node. It should be initially INVALID.
Returns:
The processed node.
Precondition:
The queue must not be empty.

Node nextNode (  )  const [inline]

Returns the next node to be processed or INVALID if the queue is empty.

bool emptyQueue (  )  const [inline]

Returns false if there are nodes to be processed in the queue.

int queueSize (  )  const [inline]

Returns the number of the nodes to be processed in the queue.

void start (  )  [inline]

Executes the algorithm.

This method runs the BFS algorithm from the root node(s) in order to compute the shortest path to each node.

The algorithm computes

  • the shortest path tree (forest),
  • the distance of each node from the root(s).

Precondition:
init() must be called and at least one root node should be added with addSource() before using this function.
Note:
b.start() is just a shortcut of the following code.
         while ( !b.emptyQueue() ) {
           b.processNextNode();
         }

void start ( Node  t  )  [inline]

Executes the algorithm until the given target node is reached.

This method runs the BFS algorithm from the root node(s) in order to compute the shortest path to t.

The algorithm computes

  • the shortest path to t,
  • the distance of t from the root(s).

Precondition:
init() must be called and at least one root node should be added with addSource() before using this function.
Note:
b.start(t) is just a shortcut of the following code.
         bool reach = false;
         while ( !b.emptyQueue() && !reach ) {
           b.processNextNode(t, reach);
         }

Node start ( const NodeBoolMap &  nm  )  [inline]

Executes the algorithm until a condition is met.

This method runs the BFS algorithm from the root node(s) in order to compute the shortest path to a node v with nm[v] true, if such a node can be found.

Parameters:
nm A bool (or convertible) node map. The algorithm will stop when it reaches a node v with nm[v] true.
Returns:
The reached node v with nm[v] true or INVALID if no such node was found.
Precondition:
init() must be called and at least one root node should be added with addSource() before using this function.
Note:
b.start(nm) is just a shortcut of the following code.
         Node rnode = INVALID;
         while ( !b.emptyQueue() && rnode == INVALID ) {
           b.processNextNode(nm, rnode);
         }
         return rnode;

void run ( Node  s  )  [inline]

This method runs the BFS algorithm from node s in order to compute the shortest path to each node.

The algorithm computes

  • the shortest path tree,
  • the distance of each node from the root.

Note:
b.run(s) is just a shortcut of the following code.
         b.init();
         b.addSource(s);
         b.start();

bool run ( Node  s,
Node  t 
) [inline]

This method runs the BFS algorithm from node s in order to compute the shortest 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, b.run(s,t) is just a shortcut of the following code.
         b.init();
         b.addSource(s);
         b.start(t);

void run (  )  [inline]

This method runs the BFS algorithm in order to compute the shortest path to each node.

The algorithm computes

  • the shortest path tree (forest),
  • the distance of each node from the root(s).

Note:
b.run(s) is just a shortcut of the following code.
         b.init();
         for (NodeIt n(gr); n != INVALID; ++n) {
           if (!b.reached(n)) {
             b.addSource(n);
             b.start();
           }
         }

Path path ( Node  t  )  const [inline]

Returns the shortest path to a node.

Warning:
t should be reachable from the root(s).
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(s).

Warning:
If node v is not reachable from the root(s), 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 shortest path tree for the node v, i.e. it returns the last arc of a shortest path from the root(s) to v. It is INVALID if v is not reachable from the root(s) or if v is a root.

The shortest path tree used here is equal to the shortest path 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 shortest path tree for the node v, i.e. it returns the last but one node from a shortest path from the root(s) to v. It is INVALID if v is not reachable from the root(s) or if v is a root.

The shortest path tree used here is equal to the shortest path 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 shortest path 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 Fri Jan 23 18:14:59 2009 for LEMON by  doxygen 1.5.6