There is also a function-type interface for the BFS algorithm, which is convenient in the simplier cases and it can be used easier.
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. |
#include <lemon/bfs.h>
Classes | |
struct | SetDistMap |
struct | SetPredMap |
struct | SetProcessedMap |
struct | SetReachedMap |
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 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. | |
Bfs & | predMap (PredMap &m) |
Sets the map that stores the predecessor arcs. | |
Bfs & | reachedMap (ReachedMap &m) |
Sets the map that indicates which nodes are reached. | |
Bfs & | processedMap (ProcessedMap &m) |
Sets the map that indicates which nodes are processed. | |
Bfs & | distMap (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 | |
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 DistMap & | distMap () const |
Returns a const reference to the node map that stores the distances of the nodes. | |
const PredMap & | predMap () 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). |
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.
(*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.
(*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.
(*this)
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.
(*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.
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
.
target | The target node. |
reach | Indicates if the target node is reached. It should be initially false . |
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.
nm | A bool (or convertible) node map that indicates the possible targets. |
rnode | The reached target node. It should be initially INVALID . |
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
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
t
,t
from the root(s).
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.
nm | A bool (or convertible) node map. The algorithm will stop when it reaches a node v with nm[v] true. |
v
with nm[v]
true or INVALID
if no such node was found.b.start(nm)
is just a shortcut of the following code. 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
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).
true
if t
is reachable form s
.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
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] |
int dist | ( | Node | v | ) | const [inline] |
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().
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().
const DistMap& distMap | ( | ) | const [inline] |
const PredMap& predMap | ( | ) | const [inline] |
bool reached | ( | Node | v | ) | const [inline] |