Changes in / [424:69f33ef03334:423:e22fc10ab6f1] in lemon
- Location:
- lemon
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
lemon/bfs.h
r421 r341 52 52 ///Instantiates a PredMap. 53 53 54 ///This function instantiates a PredMap. 54 ///This function instantiates a PredMap. 55 55 ///\param g is the digraph, to which we would like to define the 56 56 ///PredMap. … … 81 81 ///The type of the map that indicates which nodes are reached. 82 82 83 ///The type of the map that indicates which nodes are reached. 84 ///It must meet the \ref concepts::ReadWriteMap "ReadWriteMap" concept. 83 ///The type of the map that indicates which nodes are reached.///It must meet the \ref concepts::ReadWriteMap "ReadWriteMap" concept. 85 84 typedef typename Digraph::template NodeMap<bool> ReachedMap; 86 85 ///Instantiates a ReachedMap. … … 120 119 /// 121 120 ///\tparam GR The type of the digraph the algorithm runs on. 122 ///The default type is \ref ListDigraph. 121 ///The default value is \ref ListDigraph. The value of GR is not used 122 ///directly by \ref Bfs, it is only passed to \ref BfsDefaultTraits. 123 ///\tparam TR Traits class to set various data types used by the algorithm. 124 ///The default traits class is 125 ///\ref BfsDefaultTraits "BfsDefaultTraits<GR>". 126 ///See \ref BfsDefaultTraits for the documentation of 127 ///a Bfs traits class. 123 128 #ifdef DOXYGEN 124 129 template <typename GR, … … 146 151 typedef PredMapPath<Digraph, PredMap> Path; 147 152 148 ///The \ref BfsDefaultTraits "traits class" of the algorithm.153 ///The traits class. 149 154 typedef TR Traits; 150 155 … … 208 213 typedef Bfs Create; 209 214 210 ///\name Named Template Parameters215 ///\name Named template parameters 211 216 212 217 ///@{ … … 226 231 ///\ref named-templ-param "Named parameter" for setting 227 232 ///PredMap type. 228 ///It must meet the \ref concepts::WriteMap "WriteMap" concept.229 233 template <class T> 230 234 struct SetPredMap : public Bfs< Digraph, SetPredMapTraits<T> > { … … 246 250 ///\ref named-templ-param "Named parameter" for setting 247 251 ///DistMap type. 248 ///It must meet the \ref concepts::WriteMap "WriteMap" concept.249 252 template <class T> 250 253 struct SetDistMap : public Bfs< Digraph, SetDistMapTraits<T> > { … … 266 269 ///\ref named-templ-param "Named parameter" for setting 267 270 ///ReachedMap type. 268 ///It must meet the \ref concepts::ReadWriteMap "ReadWriteMap" concept.269 271 template <class T> 270 272 struct SetReachedMap : public Bfs< Digraph, SetReachedMapTraits<T> > { … … 286 288 ///\ref named-templ-param "Named parameter" for setting 287 289 ///ProcessedMap type. 288 ///It must meet the \ref concepts::WriteMap "WriteMap" concept.289 290 template <class T> 290 291 struct SetProcessedMap : public Bfs< Digraph, SetProcessedMapTraits<T> > { … … 339 340 340 341 ///Sets the map that stores the predecessor arcs. 341 ///If you don't use this function before calling \ref run(Node) "run()" 342 ///or \ref init(), an instance will be allocated automatically. 343 ///The destructor deallocates this automatically allocated map, 344 ///of course. 342 ///If you don't use this function before calling \ref run(), 343 ///it will allocate one. The destructor deallocates this 344 ///automatically allocated map, of course. 345 345 ///\return <tt> (*this) </tt> 346 346 Bfs &predMap(PredMap &m) … … 357 357 358 358 ///Sets the map that indicates which nodes are reached. 359 ///If you don't use this function before calling \ref run(Node) "run()" 360 ///or \ref init(), an instance will be allocated automatically. 361 ///The destructor deallocates this automatically allocated map, 362 ///of course. 359 ///If you don't use this function before calling \ref run(), 360 ///it will allocate one. The destructor deallocates this 361 ///automatically allocated map, of course. 363 362 ///\return <tt> (*this) </tt> 364 363 Bfs &reachedMap(ReachedMap &m) … … 375 374 376 375 ///Sets the map that indicates which nodes are processed. 377 ///If you don't use this function before calling \ref run(Node) "run()" 378 ///or \ref init(), an instance will be allocated automatically. 379 ///The destructor deallocates this automatically allocated map, 380 ///of course. 376 ///If you don't use this function before calling \ref run(), 377 ///it will allocate one. The destructor deallocates this 378 ///automatically allocated map, of course. 381 379 ///\return <tt> (*this) </tt> 382 380 Bfs &processedMap(ProcessedMap &m) … … 394 392 ///Sets the map that stores the distances of the nodes calculated by 395 393 ///the algorithm. 396 ///If you don't use this function before calling \ref run(Node) "run()" 397 ///or \ref init(), an instance will be allocated automatically. 398 ///The destructor deallocates this automatically allocated map, 399 ///of course. 394 ///If you don't use this function before calling \ref run(), 395 ///it will allocate one. The destructor deallocates this 396 ///automatically allocated map, of course. 400 397 ///\return <tt> (*this) </tt> 401 398 Bfs &distMap(DistMap &m) … … 411 408 public: 412 409 413 ///\name Execution Control 414 ///The simplest way to execute the BFS algorithm is to use one of the 415 ///member functions called \ref run(Node) "run()".\n 416 ///If you need more control on the execution, first you have to call 417 ///\ref init(), then you can add several source nodes with 418 ///\ref addSource(). Finally the actual path computation can be 419 ///performed with one of the \ref start() functions. 410 ///\name Execution control 411 ///The simplest way to execute the algorithm is to use 412 ///one of the member functions called \ref lemon::Bfs::run() "run()". 413 ///\n 414 ///If you need more control on the execution, first you must call 415 ///\ref lemon::Bfs::init() "init()", then you can add several source 416 ///nodes with \ref lemon::Bfs::addSource() "addSource()". 417 ///Finally \ref lemon::Bfs::start() "start()" will perform the 418 ///actual path computation. 420 419 421 420 ///@{ 422 421 423 ///\brief Initializes the internal data structures.424 ///425 422 ///Initializes the internal data structures. 423 424 ///Initializes the internal data structures. 425 /// 426 426 void init() 427 427 { … … 557 557 } 558 558 559 ///Returns \c false if there are nodes to be processed. 560 561 ///Returns \c false if there are nodes to be processed 562 ///in the queue. 559 ///\brief Returns \c false if there are nodes 560 ///to be processed. 561 /// 562 ///Returns \c false if there are nodes 563 ///to be processed in the queue. 563 564 bool emptyQueue() const { return _queue_tail==_queue_head; } 564 565 565 566 ///Returns the number of the nodes to be processed. 566 567 567 ///Returns the number of the nodes to be processed 568 ///in the queue. 568 ///Returns the number of the nodes to be processed in the queue. 569 569 int queueSize() const { return _queue_head-_queue_tail; } 570 570 … … 731 731 732 732 ///\name Query Functions 733 ///The result s of theBFS algorithm can be obtained using these733 ///The result of the %BFS algorithm can be obtained using these 734 734 ///functions.\n 735 ///Either \ref run(Node) "run()" or \ref start() should be called736 /// before using them.735 ///Either \ref lemon::Bfs::run() "run()" or \ref lemon::Bfs::start() 736 ///"start()" must be called before using them. 737 737 738 738 ///@{ … … 742 742 ///Returns the shortest path to a node. 743 743 /// 744 ///\warning \c t should be reach edfrom the root(s).745 /// 746 ///\pre Either \ref run( Node) "run()" or \ref init()747 /// must be called beforeusing this function.744 ///\warning \c t should be reachable from the root(s). 745 /// 746 ///\pre Either \ref run() or \ref start() must be called before 747 ///using this function. 748 748 Path path(Node t) const { return Path(*G, *_pred, t); } 749 749 … … 752 752 ///Returns the distance of a node from the root(s). 753 753 /// 754 ///\warning If node \c v is not reach edfrom the root(s), then754 ///\warning If node \c v is not reachable from the root(s), then 755 755 ///the return value of this function is undefined. 756 756 /// 757 ///\pre Either \ref run( Node) "run()" or \ref init()758 /// must be called beforeusing this function.757 ///\pre Either \ref run() or \ref start() must be called before 758 ///using this function. 759 759 int dist(Node v) const { return (*_dist)[v]; } 760 760 … … 763 763 ///This function returns the 'previous arc' of the shortest path 764 764 ///tree for the node \c v, i.e. it returns the last arc of a 765 ///shortest path from a rootto \c v. It is \c INVALID if \c v766 ///is not reach edfrom the root(s) or if \c v is a root.765 ///shortest path from the root(s) to \c v. It is \c INVALID if \c v 766 ///is not reachable from the root(s) or if \c v is a root. 767 767 /// 768 768 ///The shortest path tree used here is equal to the shortest path 769 769 ///tree used in \ref predNode(). 770 770 /// 771 ///\pre Either \ref run( Node) "run()" or \ref init()772 /// must be called beforeusing this function.771 ///\pre Either \ref run() or \ref start() must be called before 772 ///using this function. 773 773 Arc predArc(Node v) const { return (*_pred)[v];} 774 774 … … 777 777 ///This function returns the 'previous node' of the shortest path 778 778 ///tree for the node \c v, i.e. it returns the last but one node 779 ///from a shortest path from a rootto \c v. It is \c INVALID780 ///if \c v is not reach edfrom the root(s) or if \c v is a root.779 ///from a shortest path from the root(s) to \c v. It is \c INVALID 780 ///if \c v is not reachable from the root(s) or if \c v is a root. 781 781 /// 782 782 ///The shortest path tree used here is equal to the shortest path 783 783 ///tree used in \ref predArc(). 784 784 /// 785 ///\pre Either \ref run( Node) "run()" or \ref init()786 /// must be called beforeusing this function.785 ///\pre Either \ref run() or \ref start() must be called before 786 ///using this function. 787 787 Node predNode(Node v) const { return (*_pred)[v]==INVALID ? INVALID: 788 788 G->source((*_pred)[v]); } … … 794 794 ///of the nodes calculated by the algorithm. 795 795 /// 796 ///\pre Either \ref run( Node) "run()"or \ref init()796 ///\pre Either \ref run() or \ref init() 797 797 ///must be called before using this function. 798 798 const DistMap &distMap() const { return *_dist;} … … 804 804 ///arcs, which form the shortest path tree. 805 805 /// 806 ///\pre Either \ref run( Node) "run()"or \ref init()806 ///\pre Either \ref run() or \ref init() 807 807 ///must be called before using this function. 808 808 const PredMap &predMap() const { return *_pred;} 809 809 810 ///Checks if a node is reached from the root(s). 811 812 ///Returns \c true if \c v is reached from the root(s). 813 /// 814 ///\pre Either \ref run(Node) "run()" or \ref init() 810 ///Checks if a node is reachable from the root(s). 811 812 ///Returns \c true if \c v is reachable from the root(s). 813 ///\pre Either \ref run() or \ref start() 815 814 ///must be called before using this function. 816 815 bool reached(Node v) const { return (*_reached)[v]; } … … 958 957 /// This auxiliary class is created to implement the 959 958 /// \ref bfs() "function-type interface" of \ref Bfs algorithm. 960 /// It does not have own \ref run( Node) "run()" method, it uses the961 /// functionsand features of the plain \ref Bfs.959 /// It does not have own \ref run() method, it uses the functions 960 /// and features of the plain \ref Bfs. 962 961 /// 963 962 /// This class should only be used through the \ref bfs() function, … … 1179 1178 /// bool reached = bfs(g).path(p).dist(d).run(s,t); 1180 1179 ///\endcode 1181 ///\warning Don't forget to put the \ref BfsWizard::run( Node) "run()"1180 ///\warning Don't forget to put the \ref BfsWizard::run() "run()" 1182 1181 ///to the end of the parameter list. 1183 1182 ///\sa BfsWizard … … 1365 1364 typedef BfsVisit Create; 1366 1365 1367 /// \name Named Template Parameters1366 /// \name Named template parameters 1368 1367 1369 1368 ///@{ … … 1407 1406 /// 1408 1407 /// Sets the map that indicates which nodes are reached. 1409 /// If you don't use this function before calling \ref run(Node) "run()" 1410 /// or \ref init(), an instance will be allocated automatically. 1411 /// The destructor deallocates this automatically allocated map, 1412 /// of course. 1408 /// If you don't use this function before calling \ref run(), 1409 /// it will allocate one. The destructor deallocates this 1410 /// automatically allocated map, of course. 1413 1411 /// \return <tt> (*this) </tt> 1414 1412 BfsVisit &reachedMap(ReachedMap &m) { … … 1423 1421 public: 1424 1422 1425 /// \name Execution Control 1426 /// The simplest way to execute the BFS algorithm is to use one of the 1427 /// member functions called \ref run(Node) "run()".\n 1428 /// If you need more control on the execution, first you have to call 1429 /// \ref init(), then you can add several source nodes with 1430 /// \ref addSource(). Finally the actual path computation can be 1431 /// performed with one of the \ref start() functions. 1423 /// \name Execution control 1424 /// The simplest way to execute the algorithm is to use 1425 /// one of the member functions called \ref lemon::BfsVisit::run() 1426 /// "run()". 1427 /// \n 1428 /// If you need more control on the execution, first you must call 1429 /// \ref lemon::BfsVisit::init() "init()", then you can add several 1430 /// source nodes with \ref lemon::BfsVisit::addSource() "addSource()". 1431 /// Finally \ref lemon::BfsVisit::start() "start()" will perform the 1432 /// actual path computation. 1432 1433 1433 1434 /// @{ … … 1729 1730 1730 1731 /// \name Query Functions 1731 /// The result s of theBFS algorithm can be obtained using these1732 /// The result of the %BFS algorithm can be obtained using these 1732 1733 /// functions.\n 1733 /// Either \ref run(Node) "run()" or \ref start() should be called1734 /// before using them.1735 1734 /// Either \ref lemon::BfsVisit::run() "run()" or 1735 /// \ref lemon::BfsVisit::start() "start()" must be called before 1736 /// using them. 1736 1737 ///@{ 1737 1738 1738 /// \brief Checks if a node is reached from the root(s). 1739 /// 1740 /// Returns \c true if \c v is reached from the root(s). 1741 /// 1742 /// \pre Either \ref run(Node) "run()" or \ref init() 1739 /// \brief Checks if a node is reachable from the root(s). 1740 /// 1741 /// Returns \c true if \c v is reachable from the root(s). 1742 /// \pre Either \ref run() or \ref start() 1743 1743 /// must be called before using this function. 1744 1744 bool reached(Node v) { return (*_reached)[v]; } -
lemon/dfs.h
r421 r319 120 120 /// 121 121 ///\tparam GR The type of the digraph the algorithm runs on. 122 ///The default type is \ref ListDigraph. 122 ///The default value is \ref ListDigraph. The value of GR is not used 123 ///directly by \ref Dfs, it is only passed to \ref DfsDefaultTraits. 124 ///\tparam TR Traits class to set various data types used by the algorithm. 125 ///The default traits class is 126 ///\ref DfsDefaultTraits "DfsDefaultTraits<GR>". 127 ///See \ref DfsDefaultTraits for the documentation of 128 ///a Dfs traits class. 123 129 #ifdef DOXYGEN 124 130 template <typename GR, … … 146 152 typedef PredMapPath<Digraph, PredMap> Path; 147 153 148 ///The \ref DfsDefaultTraits "traits class" of the algorithm.154 ///The traits class. 149 155 typedef TR Traits; 150 156 … … 225 231 ///\ref named-templ-param "Named parameter" for setting 226 232 ///PredMap type. 227 ///It must meet the \ref concepts::WriteMap "WriteMap" concept.228 233 template <class T> 229 234 struct SetPredMap : public Dfs<Digraph, SetPredMapTraits<T> > { … … 245 250 ///\ref named-templ-param "Named parameter" for setting 246 251 ///DistMap type. 247 ///It must meet the \ref concepts::WriteMap "WriteMap" concept.248 252 template <class T> 249 253 struct SetDistMap : public Dfs< Digraph, SetDistMapTraits<T> > { … … 265 269 ///\ref named-templ-param "Named parameter" for setting 266 270 ///ReachedMap type. 267 ///It must meet the \ref concepts::ReadWriteMap "ReadWriteMap" concept.268 271 template <class T> 269 272 struct SetReachedMap : public Dfs< Digraph, SetReachedMapTraits<T> > { … … 285 288 ///\ref named-templ-param "Named parameter" for setting 286 289 ///ProcessedMap type. 287 ///It must meet the \ref concepts::WriteMap "WriteMap" concept.288 290 template <class T> 289 291 struct SetProcessedMap : public Dfs< Digraph, SetProcessedMapTraits<T> > { … … 337 339 338 340 ///Sets the map that stores the predecessor arcs. 339 ///If you don't use this function before calling \ref run(Node) "run()" 340 ///or \ref init(), an instance will be allocated automatically. 341 ///The destructor deallocates this automatically allocated map, 342 ///of course. 341 ///If you don't use this function before calling \ref run(), 342 ///it will allocate one. The destructor deallocates this 343 ///automatically allocated map, of course. 343 344 ///\return <tt> (*this) </tt> 344 345 Dfs &predMap(PredMap &m) … … 355 356 356 357 ///Sets the map that indicates which nodes are reached. 357 ///If you don't use this function before calling \ref run(Node) "run()" 358 ///or \ref init(), an instance will be allocated automatically. 359 ///The destructor deallocates this automatically allocated map, 360 ///of course. 358 ///If you don't use this function before calling \ref run(), 359 ///it will allocate one. The destructor deallocates this 360 ///automatically allocated map, of course. 361 361 ///\return <tt> (*this) </tt> 362 362 Dfs &reachedMap(ReachedMap &m) … … 373 373 374 374 ///Sets the map that indicates which nodes are processed. 375 ///If you don't use this function before calling \ref run(Node) "run()" 376 ///or \ref init(), an instance will be allocated automatically. 377 ///The destructor deallocates this automatically allocated map, 378 ///of course. 375 ///If you don't use this function before calling \ref run(), 376 ///it will allocate one. The destructor deallocates this 377 ///automatically allocated map, of course. 379 378 ///\return <tt> (*this) </tt> 380 379 Dfs &processedMap(ProcessedMap &m) … … 392 391 ///Sets the map that stores the distances of the nodes calculated by 393 392 ///the algorithm. 394 ///If you don't use this function before calling \ref run(Node) "run()" 395 ///or \ref init(), an instance will be allocated automatically. 396 ///The destructor deallocates this automatically allocated map, 397 ///of course. 393 ///If you don't use this function before calling \ref run(), 394 ///it will allocate one. The destructor deallocates this 395 ///automatically allocated map, of course. 398 396 ///\return <tt> (*this) </tt> 399 397 Dfs &distMap(DistMap &m) … … 409 407 public: 410 408 411 ///\name Execution Control 412 ///The simplest way to execute the DFS algorithm is to use one of the 413 ///member functions called \ref run(Node) "run()".\n 414 ///If you need more control on the execution, first you have to call 415 ///\ref init(), then you can add a source node with \ref addSource() 416 ///and perform the actual computation with \ref start(). 417 ///This procedure can be repeated if there are nodes that have not 418 ///been reached. 409 ///\name Execution control 410 ///The simplest way to execute the algorithm is to use 411 ///one of the member functions called \ref lemon::Dfs::run() "run()". 412 ///\n 413 ///If you need more control on the execution, first you must call 414 ///\ref lemon::Dfs::init() "init()", then you can add a source node 415 ///with \ref lemon::Dfs::addSource() "addSource()". 416 ///Finally \ref lemon::Dfs::start() "start()" will perform the 417 ///actual path computation. 419 418 420 419 ///@{ 421 420 422 ///\brief Initializes the internal data structures.423 ///424 421 ///Initializes the internal data structures. 422 423 ///Initializes the internal data structures. 424 /// 425 425 void init() 426 426 { … … 439 439 ///Adds a new source node to the set of nodes to be processed. 440 440 /// 441 ///\pre The stack must be empty. Otherwise the algorithm gives 442 ///wrong results. (One of the outgoing arcs of all the source nodes 443 ///except for the last one will not be visited and distances will 444 ///also be wrong.) 441 ///\pre The stack must be empty. (Otherwise the algorithm gives 442 ///false results.) 443 /// 444 ///\warning Distances will be wrong (or at least strange) in case of 445 ///multiple sources. 445 446 void addSource(Node s) 446 447 { … … 506 507 } 507 508 508 ///Returns \c false if there are nodes to be processed. 509 510 ///Returns \c false if there are nodes to be processed 511 ///in the queue (stack). 509 ///\brief Returns \c false if there are nodes 510 ///to be processed. 511 /// 512 ///Returns \c false if there are nodes 513 ///to be processed in the queue (stack). 512 514 bool emptyQueue() const { return _stack_head<0; } 513 515 514 516 ///Returns the number of the nodes to be processed. 515 517 516 ///Returns the number of the nodes to be processed 517 ///in the queue (stack). 518 ///Returns the number of the nodes to be processed in the queue (stack). 518 519 int queueSize() const { return _stack_head+1; } 519 520 … … 637 638 /// 638 639 ///The algorithm computes 639 ///- the %DFS tree (forest),640 ///- the distance of each node from the root (s)in the %DFS tree.640 ///- the %DFS tree, 641 ///- the distance of each node from the root in the %DFS tree. 641 642 /// 642 643 ///\note <tt>d.run()</tt> is just a shortcut of the following code. … … 663 664 664 665 ///\name Query Functions 665 ///The result s of theDFS algorithm can be obtained using these666 ///The result of the %DFS algorithm can be obtained using these 666 667 ///functions.\n 667 ///Either \ref run(Node) "run()" or \ref start() should be called668 /// before using them.668 ///Either \ref lemon::Dfs::run() "run()" or \ref lemon::Dfs::start() 669 ///"start()" must be called before using them. 669 670 670 671 ///@{ … … 674 675 ///Returns the DFS path to a node. 675 676 /// 676 ///\warning \c t should be reach ed from the root(s).677 /// 678 ///\pre Either \ref run( Node) "run()" or \ref init()679 /// must be called beforeusing this function.677 ///\warning \c t should be reachable from the root. 678 /// 679 ///\pre Either \ref run() or \ref start() must be called before 680 ///using this function. 680 681 Path path(Node t) const { return Path(*G, *_pred, t); } 681 682 682 ///The distance of a node from the root (s).683 684 ///Returns the distance of a node from the root (s).685 /// 686 ///\warning If node \c v is not reach ed from the root(s), then683 ///The distance of a node from the root. 684 685 ///Returns the distance of a node from the root. 686 /// 687 ///\warning If node \c v is not reachable from the root, then 687 688 ///the return value of this function is undefined. 688 689 /// 689 ///\pre Either \ref run( Node) "run()" or \ref init()690 /// must be called beforeusing this function.690 ///\pre Either \ref run() or \ref start() must be called before 691 ///using this function. 691 692 int dist(Node v) const { return (*_dist)[v]; } 692 693 … … 694 695 695 696 ///This function returns the 'previous arc' of the %DFS tree for the 696 ///node \c v, i.e. it returns the last arc of a %DFS path from a697 ///root to \c v. It is \c INVALID if \c v is not reached from the698 /// root(s) or if \c v is a root.697 ///node \c v, i.e. it returns the last arc of a %DFS path from the 698 ///root to \c v. It is \c INVALID 699 ///if \c v is not reachable from the root(s) or if \c v is a root. 699 700 /// 700 701 ///The %DFS tree used here is equal to the %DFS tree used in 701 702 ///\ref predNode(). 702 703 /// 703 ///\pre Either \ref run( Node) "run()" or \ref init()704 /// must be called before usingthis function.704 ///\pre Either \ref run() or \ref start() must be called before using 705 ///this function. 705 706 Arc predArc(Node v) const { return (*_pred)[v];} 706 707 … … 709 710 ///This function returns the 'previous node' of the %DFS 710 711 ///tree for the node \c v, i.e. it returns the last but one node 711 ///from a %DFS path from aroot to \c v. It is \c INVALID712 ///if \c v is not reach edfrom the root(s) or if \c v is a root.712 ///from a %DFS path from the root to \c v. It is \c INVALID 713 ///if \c v is not reachable from the root(s) or if \c v is a root. 713 714 /// 714 715 ///The %DFS tree used here is equal to the %DFS tree used in 715 716 ///\ref predArc(). 716 717 /// 717 ///\pre Either \ref run( Node) "run()" or \ref init()718 /// must be called beforeusing this function.718 ///\pre Either \ref run() or \ref start() must be called before 719 ///using this function. 719 720 Node predNode(Node v) const { return (*_pred)[v]==INVALID ? INVALID: 720 721 G->source((*_pred)[v]); } … … 726 727 ///distances of the nodes calculated by the algorithm. 727 728 /// 728 ///\pre Either \ref run( Node) "run()"or \ref init()729 ///\pre Either \ref run() or \ref init() 729 730 ///must be called before using this function. 730 731 const DistMap &distMap() const { return *_dist;} … … 736 737 ///arcs, which form the DFS tree. 737 738 /// 738 ///\pre Either \ref run( Node) "run()"or \ref init()739 ///\pre Either \ref run() or \ref init() 739 740 ///must be called before using this function. 740 741 const PredMap &predMap() const { return *_pred;} 741 742 742 ///Checks if a node is reached from the root(s). 743 744 ///Returns \c true if \c v is reached from the root(s). 745 /// 746 ///\pre Either \ref run(Node) "run()" or \ref init() 743 ///Checks if a node is reachable from the root(s). 744 745 ///Returns \c true if \c v is reachable from the root(s). 746 ///\pre Either \ref run() or \ref start() 747 747 ///must be called before using this function. 748 748 bool reached(Node v) const { return (*_reached)[v]; } … … 890 890 /// This auxiliary class is created to implement the 891 891 /// \ref dfs() "function-type interface" of \ref Dfs algorithm. 892 /// It does not have own \ref run( Node) "run()" method, it uses the893 /// functionsand features of the plain \ref Dfs.892 /// It does not have own \ref run() method, it uses the functions 893 /// and features of the plain \ref Dfs. 894 894 /// 895 895 /// This class should only be used through the \ref dfs() function, … … 1111 1111 /// bool reached = dfs(g).path(p).dist(d).run(s,t); 1112 1112 ///\endcode 1113 ///\warning Don't forget to put the \ref DfsWizard::run(Node) "run()" 1113 1114 ///\warning Don't forget to put the \ref DfsWizard::run() "run()" 1114 1115 ///to the end of the parameter list. 1115 1116 ///\sa DfsWizard … … 1309 1310 typedef DfsVisit Create; 1310 1311 1311 /// \name Named Template Parameters1312 /// \name Named template parameters 1312 1313 1313 1314 ///@{ … … 1351 1352 /// 1352 1353 /// Sets the map that indicates which nodes are reached. 1353 /// If you don't use this function before calling \ref run(Node) "run()" 1354 /// or \ref init(), an instance will be allocated automatically. 1355 /// The destructor deallocates this automatically allocated map, 1356 /// of course. 1354 /// If you don't use this function before calling \ref run(), 1355 /// it will allocate one. The destructor deallocates this 1356 /// automatically allocated map, of course. 1357 1357 /// \return <tt> (*this) </tt> 1358 1358 DfsVisit &reachedMap(ReachedMap &m) { … … 1367 1367 public: 1368 1368 1369 /// \name Execution Control 1370 /// The simplest way to execute the DFS algorithm is to use one of the 1371 /// member functions called \ref run(Node) "run()".\n 1372 /// If you need more control on the execution, first you have to call 1373 /// \ref init(), then you can add a source node with \ref addSource() 1374 /// and perform the actual computation with \ref start(). 1375 /// This procedure can be repeated if there are nodes that have not 1376 /// been reached. 1369 /// \name Execution control 1370 /// The simplest way to execute the algorithm is to use 1371 /// one of the member functions called \ref lemon::DfsVisit::run() 1372 /// "run()". 1373 /// \n 1374 /// If you need more control on the execution, first you must call 1375 /// \ref lemon::DfsVisit::init() "init()", then you can add several 1376 /// source nodes with \ref lemon::DfsVisit::addSource() "addSource()". 1377 /// Finally \ref lemon::DfsVisit::start() "start()" will perform the 1378 /// actual path computation. 1377 1379 1378 1380 /// @{ … … 1390 1392 } 1391 1393 1392 /// \brief Adds a new source node. 1393 /// 1394 /// Adds a new source node to the set of nodes to be processed. 1395 /// 1396 /// \pre The stack must be empty. Otherwise the algorithm gives 1397 /// wrong results. (One of the outgoing arcs of all the source nodes 1398 /// except for the last one will not be visited and distances will 1399 /// also be wrong.) 1394 ///Adds a new source node. 1395 1396 ///Adds a new source node to the set of nodes to be processed. 1397 /// 1398 ///\pre The stack must be empty. (Otherwise the algorithm gives 1399 ///false results.) 1400 /// 1401 ///\warning Distances will be wrong (or at least strange) in case of 1402 ///multiple sources. 1400 1403 void addSource(Node s) 1401 1404 { … … 1587 1590 /// 1588 1591 /// The algorithm computes 1589 /// - the %DFS tree (forest),1590 /// - the distance of each node from the root (s)in the %DFS tree.1592 /// - the %DFS tree, 1593 /// - the distance of each node from the root in the %DFS tree. 1591 1594 /// 1592 1595 /// \note <tt>d.run()</tt> is just a shortcut of the following code. … … 1613 1616 1614 1617 /// \name Query Functions 1615 /// The result s of theDFS algorithm can be obtained using these1618 /// The result of the %DFS algorithm can be obtained using these 1616 1619 /// functions.\n 1617 /// Either \ref run(Node) "run()" or \ref start() should be called1618 /// before using them.1619 1620 /// Either \ref lemon::DfsVisit::run() "run()" or 1621 /// \ref lemon::DfsVisit::start() "start()" must be called before 1622 /// using them. 1620 1623 ///@{ 1621 1624 1622 /// \brief Checks if a node is reached from the root(s). 1623 /// 1624 /// Returns \c true if \c v is reached from the root(s). 1625 /// 1626 /// \pre Either \ref run(Node) "run()" or \ref init() 1625 /// \brief Checks if a node is reachable from the root(s). 1626 /// 1627 /// Returns \c true if \c v is reachable from the root(s). 1628 /// \pre Either \ref run() or \ref start() 1627 1629 /// must be called before using this function. 1628 1630 bool reached(Node v) { return (*_reached)[v]; } -
lemon/dijkstra.h
r424 r412 180 180 /// 181 181 ///\tparam GR The type of the digraph the algorithm runs on. 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 182 ///The default value is \ref ListDigraph. 183 ///The value of GR is not used directly by \ref Dijkstra, it is only 184 ///passed to \ref DijkstraDefaultTraits. 185 ///\tparam LM A readable arc map that determines the lengths of the 186 ///arcs. It is read once for each arc, so the map may involve in 186 187 ///relatively time consuming process to compute the arc lengths if 187 188 ///it is necessary. The default map type is \ref 188 ///concepts::Digraph::ArcMap "GR::ArcMap<int>". 189 ///concepts::Digraph::ArcMap "Digraph::ArcMap<int>". 190 ///The value of LM is not used directly by \ref Dijkstra, it is only 191 ///passed to \ref DijkstraDefaultTraits. 192 ///\tparam TR Traits class to set various data types used by the algorithm. 193 ///The default traits class is \ref DijkstraDefaultTraits 194 ///"DijkstraDefaultTraits<GR,LM>". See \ref DijkstraDefaultTraits 195 ///for the documentation of a Dijkstra traits class. 189 196 #ifdef DOXYGEN 190 197 template <typename GR, typename LM, typename TR> … … 220 227 typedef typename TR::OperationTraits OperationTraits; 221 228 222 ///The \ref DijkstraDefaultTraits "traits class" of the algorithm.229 ///The traits class. 223 230 typedef TR Traits; 224 231 … … 302 309 ///\ref named-templ-param "Named parameter" for setting 303 310 ///PredMap type. 304 ///It must meet the \ref concepts::WriteMap "WriteMap" concept.305 311 template <class T> 306 312 struct SetPredMap … … 323 329 ///\ref named-templ-param "Named parameter" for setting 324 330 ///DistMap type. 325 ///It must meet the \ref concepts::WriteMap "WriteMap" concept.326 331 template <class T> 327 332 struct SetDistMap … … 344 349 ///\ref named-templ-param "Named parameter" for setting 345 350 ///ProcessedMap type. 346 ///It must meet the \ref concepts::WriteMap "WriteMap" concept.347 351 template <class T> 348 352 struct SetProcessedMap … … 385 389 }; 386 390 ///\brief \ref named-templ-param "Named parameter" for setting 387 ///heap and cross reference type s391 ///heap and cross reference type 388 392 /// 389 393 ///\ref named-templ-param "Named parameter" for setting heap and cross 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 394 ///reference type. 395 395 template <class H, class CR = typename Digraph::template NodeMap<int> > 396 396 struct SetHeap … … 412 412 }; 413 413 ///\brief \ref named-templ-param "Named parameter" for setting 414 ///heap and cross reference type swith automatic allocation414 ///heap and cross reference type with automatic allocation 415 415 /// 416 416 ///\ref named-templ-param "Named parameter" for setting heap and cross 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 417 ///reference type. It can allocate the heap and the cross reference 418 ///object if the cross reference's constructor waits for the digraph as 419 ///parameter and the heap's constructor waits for the cross reference. 426 420 template <class H, class CR = typename Digraph::template NodeMap<int> > 427 421 struct SetStandardHeap … … 493 487 494 488 ///Sets the map that stores the predecessor arcs. 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. 489 ///If you don't use this function before calling \ref run(), 490 ///it will allocate one. The destructor deallocates this 491 ///automatically allocated map, of course. 499 492 ///\return <tt> (*this) </tt> 500 493 Dijkstra &predMap(PredMap &m) … … 511 504 512 505 ///Sets the map that indicates which nodes are processed. 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. 506 ///If you don't use this function before calling \ref run(), 507 ///it will allocate one. The destructor deallocates this 508 ///automatically allocated map, of course. 517 509 ///\return <tt> (*this) </tt> 518 510 Dijkstra &processedMap(ProcessedMap &m) … … 530 522 ///Sets the map that stores the distances of the nodes calculated by the 531 523 ///algorithm. 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. 524 ///If you don't use this function before calling \ref run(), 525 ///it will allocate one. The destructor deallocates this 526 ///automatically allocated map, of course. 536 527 ///\return <tt> (*this) </tt> 537 528 Dijkstra &distMap(DistMap &m) … … 548 539 549 540 ///Sets the heap and the cross reference used by algorithm. 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. 541 ///If you don't use this function before calling \ref run(), 542 ///it will allocate one. The destructor deallocates this 543 ///automatically allocated heap and cross reference, of course. 555 544 ///\return <tt> (*this) </tt> 556 545 Dijkstra &heap(Heap& hp, HeapCrossRef &cr) … … 579 568 public: 580 569 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. 570 ///\name Execution control 571 ///The simplest way to execute the algorithm is to use one of the 572 ///member functions called \ref lemon::Dijkstra::run() "run()". 573 ///\n 574 ///If you need more control on the execution, first you must call 575 ///\ref lemon::Dijkstra::init() "init()", then you can add several 576 ///source nodes with \ref lemon::Dijkstra::addSource() "addSource()". 577 ///Finally \ref lemon::Dijkstra::start() "start()" will perform the 578 ///actual path computation. 588 579 589 580 ///@{ 590 581 591 ///\brief Initializes the internal data structures.592 ///593 582 ///Initializes the internal data structures. 583 584 ///Initializes the internal data structures. 585 /// 594 586 void init() 595 587 { … … 667 659 } 668 660 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. 661 ///\brief Returns \c false if there are nodes 662 ///to be processed. 663 /// 664 ///Returns \c false if there are nodes 665 ///to be processed in the priority heap. 673 666 bool emptyQueue() const { return _heap->empty(); } 674 667 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.668 ///Returns the number of the nodes to be processed in the priority heap 669 670 ///Returns the number of the nodes to be processed in the priority heap. 671 /// 679 672 int queueSize() const { return _heap->size(); } 680 673 … … 797 790 798 791 ///\name Query Functions 799 ///The result sof the %Dijkstra algorithm can be obtained using these792 ///The result of the %Dijkstra algorithm can be obtained using these 800 793 ///functions.\n 801 ///Either \ref run(Node) "run()" or \ref start() should be called 802 ///before using them. 794 ///Either \ref lemon::Dijkstra::run() "run()" or 795 ///\ref lemon::Dijkstra::start() "start()" must be called before 796 ///using them. 803 797 804 798 ///@{ … … 808 802 ///Returns the shortest path to a node. 809 803 /// 810 ///\warning \c t should be reach edfrom the root(s).811 /// 812 ///\pre Either \ref run( Node) "run()" or \ref init()813 /// must be called beforeusing this function.804 ///\warning \c t should be reachable from the root(s). 805 /// 806 ///\pre Either \ref run() or \ref start() must be called before 807 ///using this function. 814 808 Path path(Node t) const { return Path(*G, *_pred, t); } 815 809 … … 818 812 ///Returns the distance of a node from the root(s). 819 813 /// 820 ///\warning If node \c v is not reach edfrom the root(s), then814 ///\warning If node \c v is not reachable from the root(s), then 821 815 ///the return value of this function is undefined. 822 816 /// 823 ///\pre Either \ref run( Node) "run()" or \ref init()824 /// must be called beforeusing this function.817 ///\pre Either \ref run() or \ref start() must be called before 818 ///using this function. 825 819 Value dist(Node v) const { return (*_dist)[v]; } 826 820 … … 829 823 ///This function returns the 'previous arc' of the shortest path 830 824 ///tree for the node \c v, i.e. it returns the last arc of a 831 ///shortest path from a rootto \c v. It is \c INVALID if \c v832 ///is not reach edfrom the root(s) or if \c v is a root.825 ///shortest path from the root(s) to \c v. It is \c INVALID if \c v 826 ///is not reachable from the root(s) or if \c v is a root. 833 827 /// 834 828 ///The shortest path tree used here is equal to the shortest path 835 829 ///tree used in \ref predNode(). 836 830 /// 837 ///\pre Either \ref run( Node) "run()" or \ref init()838 /// must be called beforeusing this function.831 ///\pre Either \ref run() or \ref start() must be called before 832 ///using this function. 839 833 Arc predArc(Node v) const { return (*_pred)[v]; } 840 834 … … 843 837 ///This function returns the 'previous node' of the shortest path 844 838 ///tree for the node \c v, i.e. it returns the last but one node 845 ///from a shortest path from a rootto \c v. It is \c INVALID846 ///if \c v is not reach edfrom the root(s) or if \c v is a root.839 ///from a shortest path from the root(s) to \c v. It is \c INVALID 840 ///if \c v is not reachable from the root(s) or if \c v is a root. 847 841 /// 848 842 ///The shortest path tree used here is equal to the shortest path 849 843 ///tree used in \ref predArc(). 850 844 /// 851 ///\pre Either \ref run( Node) "run()" or \ref init()852 /// must be called beforeusing this function.845 ///\pre Either \ref run() or \ref start() must be called before 846 ///using this function. 853 847 Node predNode(Node v) const { return (*_pred)[v]==INVALID ? INVALID: 854 848 G->source((*_pred)[v]); } … … 860 854 ///of the nodes calculated by the algorithm. 861 855 /// 862 ///\pre Either \ref run( Node) "run()"or \ref init()856 ///\pre Either \ref run() or \ref init() 863 857 ///must be called before using this function. 864 858 const DistMap &distMap() const { return *_dist;} … … 870 864 ///arcs, which form the shortest path tree. 871 865 /// 872 ///\pre Either \ref run( Node) "run()"or \ref init()866 ///\pre Either \ref run() or \ref init() 873 867 ///must be called before using this function. 874 868 const PredMap &predMap() const { return *_pred;} 875 869 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() 870 ///Checks if a node is reachable from the root(s). 871 872 ///Returns \c true if \c v is reachable from the root(s). 873 ///\pre Either \ref run() or \ref start() 881 874 ///must be called before using this function. 882 875 bool reached(Node v) const { return (*_heap_cross_ref)[v] != … … 887 880 ///Returns \c true if \c v is processed, i.e. the shortest 888 881 ///path to \c v has already found. 889 /// 890 ///\pre Either \ref run(Node) "run()" or \ref init() 882 ///\pre Either \ref run() or \ref init() 891 883 ///must be called before using this function. 892 884 bool processed(Node v) const { return (*_heap_cross_ref)[v] == … … 897 889 ///Returns the current distance of a node from the root(s). 898 890 ///It may be decreased in the following processes. 899 /// 900 ///\pre Either \ref run(Node) "run()" or \ref init() 891 ///\pre Either \ref run() or \ref init() 901 892 ///must be called before using this function and 902 893 ///node \c v must be reached but not necessarily processed. … … 1081 1072 /// This auxiliary class is created to implement the 1082 1073 /// \ref dijkstra() "function-type interface" of \ref Dijkstra algorithm. 1083 /// It does not have own \ref run( Node) "run()" method, it uses the1084 /// functionsand features of the plain \ref Dijkstra.1074 /// It does not have own \ref run() method, it uses the functions 1075 /// and features of the plain \ref Dijkstra. 1085 1076 /// 1086 1077 /// This class should only be used through the \ref dijkstra() function, … … 1277 1268 /// bool reached = dijkstra(g,length).path(p).dist(d).run(s,t); 1278 1269 ///\endcode 1279 ///\warning Don't forget to put the \ref DijkstraWizard::run( Node) "run()"1270 ///\warning Don't forget to put the \ref DijkstraWizard::run() "run()" 1280 1271 ///to the end of the parameter list. 1281 1272 ///\sa DijkstraWizard
Note: See TracChangeset
for help on using the changeset viewer.