Dijkstra< GR, LM, TR > Class Template Reference
[Shortest Path Algorithms]


Detailed Description

template<typename GR, typename LM, typename TR>
class lemon::Dijkstra< GR, LM, TR >

This class provides an efficient implementation of the Dijkstra algorithm.

The arc lengths are passed to the algorithm using a ReadMap, so it is easy to change it to any kind of length. The type of the length is determined by the Value of the length map. It is also possible to change the underlying priority heap.

There is also a function-type interface for the Dijkstra 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 Dijkstra, it is only passed to DijkstraDefaultTraits.
LM A readable arc map that determines the lengths of the arcs. It is read once for each arc, so the map may involve in relatively time consuming process to compute the arc lengths if it is necessary. The default map type is Digraph::ArcMap<int>. The value of LM is not used directly by Dijkstra, it is only passed to DijkstraDefaultTraits.
TR Traits class to set various data types used by the algorithm. The default traits class is DijkstraDefaultTraits<GR,LM>. See DijkstraDefaultTraits for the documentation of a Dijkstra traits class.
#include <lemon/dijkstra.h>

List of all members.

Classes

struct  SetDistMap
struct  SetHeap
 Named parameter for setting heap and cross reference type More...
struct  SetOperationTraits
 Named parameter for setting OperationTraits type More...
struct  SetPredMap
struct  SetProcessedMap
struct  SetStandardHeap
 Named parameter for setting heap and cross reference type with automatic allocation 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::LengthMap::Value Value
 The type of the length of the arcs.
typedef TR::LengthMap LengthMap
 The type of the map that stores the arc lengths.
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::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::HeapCrossRef HeapCrossRef
 The cross reference type used for the current heap.
typedef TR::Heap Heap
 The heap type used by the algorithm.
typedef TR::OperationTraits OperationTraits
 The operation traits class.
typedef TR Traits
 The traits class.

Public Member Functions

 Dijkstra (const Digraph &_g, const LengthMap &_length)
 Constructor.
 ~Dijkstra ()
 Destructor.
DijkstralengthMap (const LengthMap &m)
 Sets the length map.
DijkstrapredMap (PredMap &m)
 Sets the map that stores the predecessor arcs.
DijkstraprocessedMap (ProcessedMap &m)
 Sets the map that indicates which nodes are processed.
DijkstradistMap (DistMap &m)
 Sets the map that stores the distances of the nodes.
Dijkstraheap (Heap &hp, HeapCrossRef &cr)
 Sets the heap and the cross reference used by algorithm.
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, Value dst=OperationTraits::zero())
 Adds a new source node.
Node processNextNode ()
 Processes the next node in the priority heap.
Node nextNode () const
 The next node to be processed.
bool emptyQueue () const
 Returns false if there are nodes to be processed.
int queueSize () const
void start ()
 Executes the algorithm.
void start (Node t)
 Executes the algorithm until the given target node is processed.
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.
Query Functions
The result of the Dijkstra 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.
Value 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).
bool processed (Node v) const
 Checks if a node is processed.
Value currentDist (Node v) const
 The current distance of a node from the root(s).


Constructor & Destructor Documentation

Dijkstra ( const Digraph _g,
const LengthMap _length 
) [inline]

Constructor.

Parameters:
_g The digraph the algorithm runs on.
_length The length map used by the algorithm.


Member Function Documentation

Dijkstra& lengthMap ( const LengthMap m  )  [inline]

Sets the length map.

Returns:
(*this)

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

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

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

Dijkstra& heap ( Heap hp,
HeapCrossRef cr 
) [inline]

Sets the heap and the cross reference used by algorithm. If you don't use this function before calling run(), it will allocate one. The destructor deallocates this automatically allocated heap and cross reference, of course.

Returns:
(*this)

void init (  )  [inline]

Initializes the internal data structures.

void addSource ( Node  s,
Value  dst = OperationTraits::zero() 
) [inline]

Adds a new source node to the priority heap. The optional second parameter is the initial distance of the node.

The function checks if the node has already been added to the heap and it is pushed to the heap only if either it was not in the heap or the shortest path found till then is shorter than dst.

Node processNextNode (  )  [inline]

Processes the next node in the priority heap.

Returns:
The processed node.
Warning:
The priority heap must not be empty.

Node nextNode (  )  const [inline]

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

bool emptyQueue (  )  const [inline]

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

int queueSize (  )  const [inline]

Returns the number of the nodes to be processed in the priority heap.

void start (  )  [inline]

Executes the algorithm.

This method runs the Dijkstra 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:
d.start() is just a shortcut of the following code.
         while ( !d.emptyQueue() ) {
           d.processNextNode();
         }

void start ( Node  t  )  [inline]

Executes the algorithm until the given target node is processed.

This method runs the Dijkstra 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.

Node start ( const NodeBoolMap &  nm  )  [inline]

Executes the algorithm until a condition is met.

This method runs the Dijkstra 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.

void run ( Node  s  )  [inline]

This method runs the Dijkstra 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:
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 Dijkstra 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, d.run(s,t) is just a shortcut of the following code.
         d.init();
         d.addSource(s);
         d.start(t);

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.

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

bool processed ( Node  v  )  const [inline]

Returns true if v is processed, i.e. the shortest path to v has already found.

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

Value currentDist ( Node  v  )  const [inline]

Returns the current distance of a node from the root(s). It may be decreased in the following processes.

Precondition:
Either run() or init() must be called before using this function and node v must be reached but not necessarily processed.


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

doxygen