COIN-OR::LEMON - Graph Library

Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • lemon/dijkstra.h

    r313 r463  
    33 * This file is a part of LEMON, a generic C++ optimization library.
    44 *
    5  * Copyright (C) 2003-2008
     5 * Copyright (C) 2003-2009
    66 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
    77 * (Egervary Research Group on Combinatorial Optimization, EGRES).
     
    4848    static Value plus(const Value& left, const Value& right) {
    4949      return left + right;
    50     }
    51     /// \brief Gives back true only if the first value is less than the second.
    52     static bool less(const Value& left, const Value& right) {
    53       return left < right;
    54     }
    55   };
    56 
    57   /// \brief Widest path operation traits for the Dijkstra algorithm class.
    58   ///
    59   /// This operation traits class defines all computational operations and
    60   /// constants which are used in the Dijkstra algorithm for widest path
    61   /// computation.
    62   ///
    63   /// \see DijkstraDefaultOperationTraits
    64   template <typename Value>
    65   struct DijkstraWidestPathOperationTraits {
    66     /// \brief Gives back the maximum value of the type.
    67     static Value zero() {
    68       return std::numeric_limits<Value>::max();
    69     }
    70     /// \brief Gives back the minimum of the given two elements.
    71     static Value plus(const Value& left, const Value& right) {
    72       return std::min(left, right);
    7350    }
    7451    /// \brief Gives back true only if the first value is less than the second.
     
    203180  ///
    204181  ///\tparam GR The type of the digraph the algorithm runs on.
    205   ///The default value is \ref ListDigraph.
    206   ///The value of GR is not used directly by \ref Dijkstra, it is only
    207   ///passed to \ref DijkstraDefaultTraits.
    208   ///\tparam LM A readable arc map that determines the lengths of the
    209   ///arcs. It is read once for each arc, so the map may involve in
     182  ///The default type is \ref ListDigraph.
     183  ///\tparam LM A \ref concepts::ReadMap "readable" arc map that specifies
     184  ///the lengths of the arcs.
     185  ///It is read once for each arc, so the map may involve in
    210186  ///relatively time consuming process to compute the arc lengths if
    211187  ///it is necessary. The default map type is \ref
    212   ///concepts::Digraph::ArcMap "Digraph::ArcMap<int>".
    213   ///The value of LM is not used directly by \ref Dijkstra, it is only
    214   ///passed to \ref DijkstraDefaultTraits.
    215   ///\tparam TR Traits class to set various data types used by the algorithm.
    216   ///The default traits class is \ref DijkstraDefaultTraits
    217   ///"DijkstraDefaultTraits<GR,LM>". See \ref DijkstraDefaultTraits
    218   ///for the documentation of a Dijkstra traits class.
     188  ///concepts::Digraph::ArcMap "GR::ArcMap<int>".
    219189#ifdef DOXYGEN
    220190  template <typename GR, typename LM, typename TR>
     
    250220    typedef typename TR::OperationTraits OperationTraits;
    251221
    252     ///The traits class.
     222    ///The \ref DijkstraDefaultTraits "traits class" of the algorithm.
    253223    typedef TR Traits;
    254224
     
    332302    ///\ref named-templ-param "Named parameter" for setting
    333303    ///PredMap type.
     304    ///It must meet the \ref concepts::WriteMap "WriteMap" concept.
    334305    template <class T>
    335306    struct SetPredMap
     
    352323    ///\ref named-templ-param "Named parameter" for setting
    353324    ///DistMap type.
     325    ///It must meet the \ref concepts::WriteMap "WriteMap" concept.
    354326    template <class T>
    355327    struct SetDistMap
     
    372344    ///\ref named-templ-param "Named parameter" for setting
    373345    ///ProcessedMap type.
     346    ///It must meet the \ref concepts::WriteMap "WriteMap" concept.
    374347    template <class T>
    375348    struct SetProcessedMap
     
    412385    };
    413386    ///\brief \ref named-templ-param "Named parameter" for setting
    414     ///heap and cross reference type
     387    ///heap and cross reference types
    415388    ///
    416389    ///\ref named-templ-param "Named parameter" for setting heap and cross
    417     ///reference type.
     390    ///reference types. If this named parameter is used, then external
     391    ///heap and cross reference objects must be passed to the algorithm
     392    ///using the \ref heap() function before calling \ref run(Node) "run()"
     393    ///or \ref init().
     394    ///\sa SetStandardHeap
    418395    template <class H, class CR = typename Digraph::template NodeMap<int> >
    419396    struct SetHeap
     
    435412    };
    436413    ///\brief \ref named-templ-param "Named parameter" for setting
    437     ///heap and cross reference type with automatic allocation
     414    ///heap and cross reference types with automatic allocation
    438415    ///
    439416    ///\ref named-templ-param "Named parameter" for setting heap and cross
    440     ///reference type. It can allocate the heap and the cross reference
    441     ///object if the cross reference's constructor waits for the digraph as
    442     ///parameter and the heap's constructor waits for the cross reference.
     417    ///reference types with automatic allocation.
     418    ///They should have standard constructor interfaces to be able to
     419    ///automatically created by the algorithm (i.e. the digraph should be
     420    ///passed to the constructor of the cross reference and the cross
     421    ///reference should be passed to the constructor of the heap).
     422    ///However external heap and cross reference objects could also be
     423    ///passed to the algorithm using the \ref heap() function before
     424    ///calling \ref run(Node) "run()" or \ref init().
     425    ///\sa SetHeap
    443426    template <class H, class CR = typename Digraph::template NodeMap<int> >
    444427    struct SetStandardHeap
     
    510493
    511494    ///Sets the map that stores the predecessor arcs.
    512     ///If you don't use this function before calling \ref run(),
    513     ///it will allocate one. The destructor deallocates this
    514     ///automatically allocated map, of course.
     495    ///If you don't use this function before calling \ref run(Node) "run()"
     496    ///or \ref init(), an instance will be allocated automatically.
     497    ///The destructor deallocates this automatically allocated map,
     498    ///of course.
    515499    ///\return <tt> (*this) </tt>
    516500    Dijkstra &predMap(PredMap &m)
     
    527511
    528512    ///Sets the map that indicates which nodes are processed.
    529     ///If you don't use this function before calling \ref run(),
    530     ///it will allocate one. The destructor deallocates this
    531     ///automatically allocated map, of course.
     513    ///If you don't use this function before calling \ref run(Node) "run()"
     514    ///or \ref init(), an instance will be allocated automatically.
     515    ///The destructor deallocates this automatically allocated map,
     516    ///of course.
    532517    ///\return <tt> (*this) </tt>
    533518    Dijkstra &processedMap(ProcessedMap &m)
     
    545530    ///Sets the map that stores the distances of the nodes calculated by the
    546531    ///algorithm.
    547     ///If you don't use this function before calling \ref run(),
    548     ///it will allocate one. The destructor deallocates this
    549     ///automatically allocated map, of course.
     532    ///If you don't use this function before calling \ref run(Node) "run()"
     533    ///or \ref init(), an instance will be allocated automatically.
     534    ///The destructor deallocates this automatically allocated map,
     535    ///of course.
    550536    ///\return <tt> (*this) </tt>
    551537    Dijkstra &distMap(DistMap &m)
     
    562548
    563549    ///Sets the heap and the cross reference used by algorithm.
    564     ///If you don't use this function before calling \ref run(),
    565     ///it will allocate one. The destructor deallocates this
    566     ///automatically allocated heap and cross reference, of course.
     550    ///If you don't use this function before calling \ref run(Node) "run()"
     551    ///or \ref init(), heap and cross reference instances will be
     552    ///allocated automatically.
     553    ///The destructor deallocates these automatically allocated objects,
     554    ///of course.
    567555    ///\return <tt> (*this) </tt>
    568556    Dijkstra &heap(Heap& hp, HeapCrossRef &cr)
     
    591579  public:
    592580
    593     ///\name Execution control
    594     ///The simplest way to execute the algorithm is to use one of the
    595     ///member functions called \ref lemon::Dijkstra::run() "run()".
    596     ///\n
    597     ///If you need more control on the execution, first you must call
    598     ///\ref lemon::Dijkstra::init() "init()", then you can add several
    599     ///source nodes with \ref lemon::Dijkstra::addSource() "addSource()".
    600     ///Finally \ref lemon::Dijkstra::start() "start()" will perform the
    601     ///actual path computation.
     581    ///\name Execution Control
     582    ///The simplest way to execute the %Dijkstra algorithm is to use
     583    ///one of the member functions called \ref run(Node) "run()".\n
     584    ///If you need more control on the execution, first you have to call
     585    ///\ref init(), then you can add several source nodes with
     586    ///\ref addSource(). Finally the actual path computation can be
     587    ///performed with one of the \ref start() functions.
    602588
    603589    ///@{
    604590
     591    ///\brief Initializes the internal data structures.
     592    ///
    605593    ///Initializes the internal data structures.
    606 
    607     ///Initializes the internal data structures.
    608     ///
    609594    void init()
    610595    {
     
    682667    }
    683668
    684     ///\brief Returns \c false if there are nodes
    685     ///to be processed.
    686     ///
    687     ///Returns \c false if there are nodes
    688     ///to be processed in the priority heap.
     669    ///Returns \c false if there are nodes to be processed.
     670
     671    ///Returns \c false if there are nodes to be processed
     672    ///in the priority heap.
    689673    bool emptyQueue() const { return _heap->empty(); }
    690674
    691     ///Returns the number of the nodes to be processed in the priority heap
    692 
    693     ///Returns the number of the nodes to be processed in the priority heap.
    694     ///
     675    ///Returns the number of the nodes to be processed.
     676
     677    ///Returns the number of the nodes to be processed
     678    ///in the priority heap.
    695679    int queueSize() const { return _heap->size(); }
    696680
     
    813797
    814798    ///\name Query Functions
    815     ///The result of the %Dijkstra algorithm can be obtained using these
     799    ///The results of the %Dijkstra algorithm can be obtained using these
    816800    ///functions.\n
    817     ///Either \ref lemon::Dijkstra::run() "run()" or
    818     ///\ref lemon::Dijkstra::start() "start()" must be called before
    819     ///using them.
     801    ///Either \ref run(Node) "run()" or \ref start() should be called
     802    ///before using them.
    820803
    821804    ///@{
     
    825808    ///Returns the shortest path to a node.
    826809    ///
    827     ///\warning \c t should be reachable from the root(s).
    828     ///
    829     ///\pre Either \ref run() or \ref start() must be called before
    830     ///using this function.
     810    ///\warning \c t should be reached from the root(s).
     811    ///
     812    ///\pre Either \ref run(Node) "run()" or \ref init()
     813    ///must be called before using this function.
    831814    Path path(Node t) const { return Path(*G, *_pred, t); }
    832815
     
    835818    ///Returns the distance of a node from the root(s).
    836819    ///
    837     ///\warning If node \c v is not reachable from the root(s), then
     820    ///\warning If node \c v is not reached from the root(s), then
    838821    ///the return value of this function is undefined.
    839822    ///
    840     ///\pre Either \ref run() or \ref start() must be called before
    841     ///using this function.
     823    ///\pre Either \ref run(Node) "run()" or \ref init()
     824    ///must be called before using this function.
    842825    Value dist(Node v) const { return (*_dist)[v]; }
    843826
     
    846829    ///This function returns the 'previous arc' of the shortest path
    847830    ///tree for the node \c v, i.e. it returns the last arc of a
    848     ///shortest path from the root(s) to \c v. It is \c INVALID if \c v
    849     ///is not reachable from the root(s) or if \c v is a root.
     831    ///shortest path from a root to \c v. It is \c INVALID if \c v
     832    ///is not reached from the root(s) or if \c v is a root.
    850833    ///
    851834    ///The shortest path tree used here is equal to the shortest path
    852835    ///tree used in \ref predNode().
    853836    ///
    854     ///\pre Either \ref run() or \ref start() must be called before
    855     ///using this function.
     837    ///\pre Either \ref run(Node) "run()" or \ref init()
     838    ///must be called before using this function.
    856839    Arc predArc(Node v) const { return (*_pred)[v]; }
    857840
     
    860843    ///This function returns the 'previous node' of the shortest path
    861844    ///tree for the node \c v, i.e. it returns the last but one node
    862     ///from a shortest path from the root(s) to \c v. It is \c INVALID
    863     ///if \c v is not reachable from the root(s) or if \c v is a root.
     845    ///from a shortest path from a root to \c v. It is \c INVALID
     846    ///if \c v is not reached from the root(s) or if \c v is a root.
    864847    ///
    865848    ///The shortest path tree used here is equal to the shortest path
    866849    ///tree used in \ref predArc().
    867850    ///
    868     ///\pre Either \ref run() or \ref start() must be called before
    869     ///using this function.
     851    ///\pre Either \ref run(Node) "run()" or \ref init()
     852    ///must be called before using this function.
    870853    Node predNode(Node v) const { return (*_pred)[v]==INVALID ? INVALID:
    871854                                  G->source((*_pred)[v]); }
     
    877860    ///of the nodes calculated by the algorithm.
    878861    ///
    879     ///\pre Either \ref run() or \ref init()
     862    ///\pre Either \ref run(Node) "run()" or \ref init()
    880863    ///must be called before using this function.
    881864    const DistMap &distMap() const { return *_dist;}
     
    887870    ///arcs, which form the shortest path tree.
    888871    ///
    889     ///\pre Either \ref run() or \ref init()
     872    ///\pre Either \ref run(Node) "run()" or \ref init()
    890873    ///must be called before using this function.
    891874    const PredMap &predMap() const { return *_pred;}
    892875
    893     ///Checks if a node is reachable from the root(s).
    894 
    895     ///Returns \c true if \c v is reachable from the root(s).
    896     ///\pre Either \ref run() or \ref start()
     876    ///Checks if a node is reached from the root(s).
     877
     878    ///Returns \c true if \c v is reached from the root(s).
     879    ///
     880    ///\pre Either \ref run(Node) "run()" or \ref init()
    897881    ///must be called before using this function.
    898882    bool reached(Node v) const { return (*_heap_cross_ref)[v] !=
     
    903887    ///Returns \c true if \c v is processed, i.e. the shortest
    904888    ///path to \c v has already found.
    905     ///\pre Either \ref run() or \ref init()
     889    ///
     890    ///\pre Either \ref run(Node) "run()" or \ref init()
    906891    ///must be called before using this function.
    907892    bool processed(Node v) const { return (*_heap_cross_ref)[v] ==
     
    912897    ///Returns the current distance of a node from the root(s).
    913898    ///It may be decreased in the following processes.
    914     ///\pre Either \ref run() or \ref init()
     899    ///
     900    ///\pre Either \ref run(Node) "run()" or \ref init()
    915901    ///must be called before using this function and
    916902    ///node \c v must be reached but not necessarily processed.
     
    10951081  /// This auxiliary class is created to implement the
    10961082  /// \ref dijkstra() "function-type interface" of \ref Dijkstra algorithm.
    1097   /// It does not have own \ref run() method, it uses the functions
    1098   /// and features of the plain \ref Dijkstra.
     1083  /// It does not have own \ref run(Node) "run()" method, it uses the
     1084  /// functions and features of the plain \ref Dijkstra.
    10991085  ///
    11001086  /// This class should only be used through the \ref dijkstra() function,
     
    12911277  ///  bool reached = dijkstra(g,length).path(p).dist(d).run(s,t);
    12921278  ///\endcode
    1293   ///\warning Don't forget to put the \ref DijkstraWizard::run() "run()"
     1279  ///\warning Don't forget to put the \ref DijkstraWizard::run(Node) "run()"
    12941280  ///to the end of the parameter list.
    12951281  ///\sa DijkstraWizard
Note: See TracChangeset for help on using the changeset viewer.