Changes in / [418:ad483acf1654:417:6ff53afe98b5] in lemon-main
- Files:
-
- 4 deleted
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
doc/groups.dox
r418 r416 16 16 * 17 17 */ 18 19 namespace lemon {20 18 21 19 /** … … 164 162 165 163 This group describes maps that are specifically designed to assign 166 values to the nodes and arcs/edges of graphs. 167 168 If you are looking for the standard graph maps (\c NodeMap, \c ArcMap, 169 \c EdgeMap), see the \ref graph_concepts "Graph Structure Concepts". 164 values to the nodes and arcs of graphs. 170 165 */ 171 166 … … 178 173 maps from other maps. 179 174 180 Most of them are \ref concepts::ReadMap "read-only maps".175 Most of them are \ref lemon::concepts::ReadMap "read-only maps". 181 176 They can make arithmetic and logical operations between one or two maps 182 177 (negation, shifting, addition, multiplication, logical 'and', 'or', … … 280 275 \brief Common graph search algorithms. 281 276 282 This group describes the common graph search algorithms , namely283 \e breadth-first \e search (BFS) and \e depth-first \e search (DFS).277 This group describes the common graph search algorithms like 278 Breadth-First Search (BFS) and Depth-First Search (DFS). 284 279 */ 285 280 … … 289 284 \brief Algorithms for finding shortest paths. 290 285 291 This group describes the algorithms for finding shortest paths in digraphs. 292 293 - \ref Dijkstra algorithm for finding shortest paths from a source node 294 when all arc lengths are non-negative. 295 - \ref BellmanFord "Bellman-Ford" algorithm for finding shortest paths 296 from a source node when arc lenghts can be either positive or negative, 297 but the digraph should not contain directed cycles with negative total 298 length. 299 - \ref FloydWarshall "Floyd-Warshall" and \ref Johnson "Johnson" algorithms 300 for solving the \e all-pairs \e shortest \e paths \e problem when arc 301 lenghts can be either positive or negative, but the digraph should 302 not contain directed cycles with negative total length. 303 - \ref Suurballe A successive shortest path algorithm for finding 304 arc-disjoint paths between two nodes having minimum total length. 286 This group describes the algorithms for finding shortest paths in graphs. 305 287 */ 306 288 … … 313 295 feasible circulations. 314 296 315 The \e maximum \e flow \e problem is to find a flow of maximum value between 316 a single source and a single target. Formally, there is a \f$G=(V,A)\f$ 317 digraph, a \f$cap:A\rightarrow\mathbf{R}^+_0\f$ capacity function and 318 \f$s, t \in V\f$ source and target nodes. 319 A maximum flow is an \f$f:A\rightarrow\mathbf{R}^+_0\f$ solution of the 320 following optimization problem. 321 322 \f[ \max\sum_{a\in\delta_{out}(s)}f(a) - \sum_{a\in\delta_{in}(s)}f(a) \f] 323 \f[ \sum_{a\in\delta_{out}(v)} f(a) = \sum_{a\in\delta_{in}(v)} f(a) 324 \qquad \forall v\in V\setminus\{s,t\} \f] 325 \f[ 0 \leq f(a) \leq cap(a) \qquad \forall a\in A \f] 297 The maximum flow problem is to find a flow between a single source and 298 a single target that is maximum. Formally, there is a \f$G=(V,A)\f$ 299 directed graph, an \f$c_a:A\rightarrow\mathbf{R}^+_0\f$ capacity 300 function and given \f$s, t \in V\f$ source and target node. The 301 maximum flow is the \f$f_a\f$ solution of the next optimization problem: 302 303 \f[ 0 \le f_a \le c_a \f] 304 \f[ \sum_{v\in\delta^{-}(u)}f_{vu}=\sum_{v\in\delta^{+}(u)}f_{uv} 305 \qquad \forall u \in V \setminus \{s,t\}\f] 306 \f[ \max \sum_{v\in\delta^{+}(s)}f_{uv} - \sum_{v\in\delta^{-}(s)}f_{vu}\f] 326 307 327 308 LEMON contains several algorithms for solving maximum flow problems: 328 - \ref EdmondsKarp Edmonds-Karp algorithm.329 - \ref Preflow Goldberg-Tarjan's preflow push-relabel algorithm.330 - \ref DinitzSleatorTarjan Dinitz's blocking flow algorithm with dynamic trees.331 - \ref GoldbergTarjan Preflow push-relabel algorithm with dynamic trees.332 333 In most cases the \ref Preflow "Preflow" algorithm provides the334 fastest method for computing a maximum flow. All implementations335 provides functions to also query the minimum cut, which is the dual336 pro blem of the maximum flow.309 - \ref lemon::EdmondsKarp "Edmonds-Karp" 310 - \ref lemon::Preflow "Goldberg's Preflow algorithm" 311 - \ref lemon::DinitzSleatorTarjan "Dinitz's blocking flow algorithm with dynamic trees" 312 - \ref lemon::GoldbergTarjan "Preflow algorithm with dynamic trees" 313 314 In most cases the \ref lemon::Preflow "Preflow" algorithm provides the 315 fastest method to compute the maximum flow. All impelementations 316 provides functions to query the minimum cut, which is the dual linear 317 programming problem of the maximum flow. 337 318 */ 338 319 … … 345 326 This group describes the algorithms for finding minimum cost flows and 346 327 circulations. 347 348 The \e minimum \e cost \e flow \e problem is to find a feasible flow of349 minimum total cost from a set of supply nodes to a set of demand nodes350 in a network with capacity constraints and arc costs.351 Formally, let \f$G=(V,A)\f$ be a digraph,352 \f$lower, upper: A\rightarrow\mathbf{Z}^+_0\f$ denote the lower and353 upper bounds for the flow values on the arcs,354 \f$cost: A\rightarrow\mathbf{Z}^+_0\f$ denotes the cost per unit flow355 on the arcs, and356 \f$supply: V\rightarrow\mathbf{Z}\f$ denotes the supply/demand values357 of the nodes.358 A minimum cost flow is an \f$f:A\rightarrow\mathbf{R}^+_0\f$ solution of359 the following optimization problem.360 361 \f[ \min\sum_{a\in A} f(a) cost(a) \f]362 \f[ \sum_{a\in\delta_{out}(v)} f(a) - \sum_{a\in\delta_{in}(v)} f(a) =363 supply(v) \qquad \forall v\in V \f]364 \f[ lower(a) \leq f(a) \leq upper(a) \qquad \forall a\in A \f]365 366 LEMON contains several algorithms for solving minimum cost flow problems:367 - \ref CycleCanceling Cycle-canceling algorithms.368 - \ref CapacityScaling Successive shortest path algorithm with optional369 capacity scaling.370 - \ref CostScaling Push-relabel and augment-relabel algorithms based on371 cost scaling.372 - \ref NetworkSimplex Primal network simplex algorithm with various373 pivot strategies.374 328 */ 375 329 … … 382 336 This group describes the algorithms for finding minimum cut in graphs. 383 337 384 The \e minimum \e cut \eproblem is to find a non-empty and non-complete385 \f$X\f$ subset of the nodes with minimum overall capacity on386 outgoing arcs. Formally, there is a \f$G=(V,A)\f$ digraph, a387 \f$c ap:A\rightarrow\mathbf{R}^+_0\f$ capacity function. The minimum338 The minimum cut problem is to find a non-empty and non-complete 339 \f$X\f$ subset of the vertices with minimum overall capacity on 340 outgoing arcs. Formally, there is \f$G=(V,A)\f$ directed graph, an 341 \f$c_a:A\rightarrow\mathbf{R}^+_0\f$ capacity function. The minimum 388 342 cut is the \f$X\f$ solution of the next optimization problem: 389 343 390 344 \f[ \min_{X \subset V, X\not\in \{\emptyset, V\}} 391 \sum_{uv\in A, u\in X, v\not\in X}cap(uv)\f]345 \sum_{uv\in A, u\in X, v\not\in X}c_{uv}\f] 392 346 393 347 LEMON contains several algorithms related to minimum cut problems: 394 348 395 - \ref HaoOrlin "Hao-Orlin algorithm" for calculatingminimum cut396 in directed graphs .397 - \ref NagamochiIbaraki "Nagamochi-Ibaraki algorithm" for398 calculat ing minimum cut in undirected graphs.399 - \ref GomoryHuTree "Gomory-Hu tree computation" for calculating400 all-pairs minimum cut in undirected graphs.349 - \ref lemon::HaoOrlin "Hao-Orlin algorithm" to calculate minimum cut 350 in directed graphs 351 - \ref lemon::NagamochiIbaraki "Nagamochi-Ibaraki algorithm" to 352 calculate minimum cut in undirected graphs 353 - \ref lemon::GomoryHuTree "Gomory-Hu tree computation" to calculate all 354 pairs minimum cut in undirected graphs 401 355 402 356 If you want to find minimum cut just between two distinict nodes, 403 see the \ref max_flow "maximum flow problem".357 please see the \ref max_flow "Maximum Flow page". 404 358 */ 405 359 … … 440 394 graphs. The matching problems in bipartite graphs are generally 441 395 easier than in general graphs. The goal of the matching optimization 442 can be finding maximum cardinality, maximum weight or minimum cost396 can be the finding maximum cardinality, maximum weight or minimum cost 443 397 matching. The search can be constrained to find perfect or 444 398 maximum cardinality matching. 445 399 446 The matching algorithms implemented in LEMON: 447 - \ref MaxBipartiteMatching Hopcroft-Karp augmenting path algorithm 448 for calculating maximum cardinality matching in bipartite graphs. 449 - \ref PrBipartiteMatching Push-relabel algorithm 450 for calculating maximum cardinality matching in bipartite graphs. 451 - \ref MaxWeightedBipartiteMatching 452 Successive shortest path algorithm for calculating maximum weighted 453 matching and maximum weighted bipartite matching in bipartite graphs. 454 - \ref MinCostMaxBipartiteMatching 455 Successive shortest path algorithm for calculating minimum cost maximum 456 matching in bipartite graphs. 457 - \ref MaxMatching Edmond's blossom shrinking algorithm for calculating 458 maximum cardinality matching in general graphs. 459 - \ref MaxWeightedMatching Edmond's blossom shrinking algorithm for calculating 460 maximum weighted matching in general graphs. 461 - \ref MaxWeightedPerfectMatching 462 Edmond's blossom shrinking algorithm for calculating maximum weighted 463 perfect matching in general graphs. 400 LEMON contains the next algorithms: 401 - \ref lemon::MaxBipartiteMatching "MaxBipartiteMatching" Hopcroft-Karp 402 augmenting path algorithm for calculate maximum cardinality matching in 403 bipartite graphs 404 - \ref lemon::PrBipartiteMatching "PrBipartiteMatching" Push-Relabel 405 algorithm for calculate maximum cardinality matching in bipartite graphs 406 - \ref lemon::MaxWeightedBipartiteMatching "MaxWeightedBipartiteMatching" 407 Successive shortest path algorithm for calculate maximum weighted matching 408 and maximum weighted bipartite matching in bipartite graph 409 - \ref lemon::MinCostMaxBipartiteMatching "MinCostMaxBipartiteMatching" 410 Successive shortest path algorithm for calculate minimum cost maximum 411 matching in bipartite graph 412 - \ref lemon::MaxMatching "MaxMatching" Edmond's blossom shrinking algorithm 413 for calculate maximum cardinality matching in general graph 414 - \ref lemon::MaxWeightedMatching "MaxWeightedMatching" Edmond's blossom 415 shrinking algorithm for calculate maximum weighted matching in general 416 graph 417 - \ref lemon::MaxWeightedPerfectMatching "MaxWeightedPerfectMatching" 418 Edmond's blossom shrinking algorithm for calculate maximum weighted 419 perfect matching in general graph 464 420 465 421 \image html bipartite_matching.png … … 473 429 474 430 This group describes the algorithms for finding a minimum cost spanning 475 tree in a graph .431 tree in a graph 476 432 */ 477 433 … … 664 620 \anchor demoprograms 665 621 666 @defgroup demos Demo Programs622 @defgroup demos Demo programs 667 623 668 624 Some demo programs are listed here. Their full source codes can be found in … … 674 630 675 631 /** 676 @defgroup tools Standalone Utility Applications632 @defgroup tools Standalone utility applications 677 633 678 634 Some utility applications are listed here. … … 682 638 */ 683 639 684 } -
lemon/Makefile.am
r418 r416 22 22 lemon/bfs.h \ 23 23 lemon/bin_heap.h \ 24 lemon/circulation.h \25 24 lemon/color.h \ 26 25 lemon/concept_check.h \ … … 38 37 lemon/hypercube_graph.h \ 39 38 lemon/kruskal.h \ 40 lemon/hao_orlin.h \41 39 lemon/lgf_reader.h \ 42 40 lemon/lgf_writer.h \ -
lemon/bfs.h
r405 r329 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
r405 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
r408 r313 55 55 }; 56 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); 73 } 74 /// \brief Gives back true only if the first value is less than the second. 75 static bool less(const Value& left, const Value& right) { 76 return left < right; 77 } 78 }; 79 57 80 ///Default traits class of Dijkstra class. 58 81 … … 180 203 /// 181 204 ///\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 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 186 210 ///relatively time consuming process to compute the arc lengths if 187 211 ///it is necessary. The default map type is \ref 188 ///concepts::Digraph::ArcMap "GR::ArcMap<int>". 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. 189 219 #ifdef DOXYGEN 190 220 template <typename GR, typename LM, typename TR> … … 220 250 typedef typename TR::OperationTraits OperationTraits; 221 251 222 ///The \ref DijkstraDefaultTraits "traits class" of the algorithm.252 ///The traits class. 223 253 typedef TR Traits; 224 254 … … 302 332 ///\ref named-templ-param "Named parameter" for setting 303 333 ///PredMap type. 304 ///It must meet the \ref concepts::WriteMap "WriteMap" concept.305 334 template <class T> 306 335 struct SetPredMap … … 323 352 ///\ref named-templ-param "Named parameter" for setting 324 353 ///DistMap type. 325 ///It must meet the \ref concepts::WriteMap "WriteMap" concept.326 354 template <class T> 327 355 struct SetDistMap … … 344 372 ///\ref named-templ-param "Named parameter" for setting 345 373 ///ProcessedMap type. 346 ///It must meet the \ref concepts::WriteMap "WriteMap" concept.347 374 template <class T> 348 375 struct SetProcessedMap … … 385 412 }; 386 413 ///\brief \ref named-templ-param "Named parameter" for setting 387 ///heap and cross reference type s414 ///heap and cross reference type 388 415 /// 389 416 ///\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 417 ///reference type. 395 418 template <class H, class CR = typename Digraph::template NodeMap<int> > 396 419 struct SetHeap … … 412 435 }; 413 436 ///\brief \ref named-templ-param "Named parameter" for setting 414 ///heap and cross reference type swith automatic allocation437 ///heap and cross reference type with automatic allocation 415 438 /// 416 439 ///\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 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. 426 443 template <class H, class CR = typename Digraph::template NodeMap<int> > 427 444 struct SetStandardHeap … … 493 510 494 511 ///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. 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. 499 515 ///\return <tt> (*this) </tt> 500 516 Dijkstra &predMap(PredMap &m) … … 511 527 512 528 ///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. 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. 517 532 ///\return <tt> (*this) </tt> 518 533 Dijkstra &processedMap(ProcessedMap &m) … … 530 545 ///Sets the map that stores the distances of the nodes calculated by the 531 546 ///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. 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. 536 550 ///\return <tt> (*this) </tt> 537 551 Dijkstra &distMap(DistMap &m) … … 548 562 549 563 ///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. 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. 555 567 ///\return <tt> (*this) </tt> 556 568 Dijkstra &heap(Heap& hp, HeapCrossRef &cr) … … 579 591 public: 580 592 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. 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. 588 602 589 603 ///@{ 590 604 591 ///\brief Initializes the internal data structures.592 ///593 605 ///Initializes the internal data structures. 606 607 ///Initializes the internal data structures. 608 /// 594 609 void init() 595 610 { … … 667 682 } 668 683 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. 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. 673 689 bool emptyQueue() const { return _heap->empty(); } 674 690 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.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 /// 679 695 int queueSize() const { return _heap->size(); } 680 696 … … 797 813 798 814 ///\name Query Functions 799 ///The result sof the %Dijkstra algorithm can be obtained using these815 ///The result of the %Dijkstra algorithm can be obtained using these 800 816 ///functions.\n 801 ///Either \ref run(Node) "run()" or \ref start() should be called 802 ///before using them. 817 ///Either \ref lemon::Dijkstra::run() "run()" or 818 ///\ref lemon::Dijkstra::start() "start()" must be called before 819 ///using them. 803 820 804 821 ///@{ … … 808 825 ///Returns the shortest path to a node. 809 826 /// 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.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. 814 831 Path path(Node t) const { return Path(*G, *_pred, t); } 815 832 … … 818 835 ///Returns the distance of a node from the root(s). 819 836 /// 820 ///\warning If node \c v is not reach edfrom the root(s), then837 ///\warning If node \c v is not reachable from the root(s), then 821 838 ///the return value of this function is undefined. 822 839 /// 823 ///\pre Either \ref run( Node) "run()" or \ref init()824 /// must be called beforeusing this function.840 ///\pre Either \ref run() or \ref start() must be called before 841 ///using this function. 825 842 Value dist(Node v) const { return (*_dist)[v]; } 826 843 … … 829 846 ///This function returns the 'previous arc' of the shortest path 830 847 ///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.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. 833 850 /// 834 851 ///The shortest path tree used here is equal to the shortest path 835 852 ///tree used in \ref predNode(). 836 853 /// 837 ///\pre Either \ref run( Node) "run()" or \ref init()838 /// must be called beforeusing this function.854 ///\pre Either \ref run() or \ref start() must be called before 855 ///using this function. 839 856 Arc predArc(Node v) const { return (*_pred)[v]; } 840 857 … … 843 860 ///This function returns the 'previous node' of the shortest path 844 861 ///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.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. 847 864 /// 848 865 ///The shortest path tree used here is equal to the shortest path 849 866 ///tree used in \ref predArc(). 850 867 /// 851 ///\pre Either \ref run( Node) "run()" or \ref init()852 /// must be called beforeusing this function.868 ///\pre Either \ref run() or \ref start() must be called before 869 ///using this function. 853 870 Node predNode(Node v) const { return (*_pred)[v]==INVALID ? INVALID: 854 871 G->source((*_pred)[v]); } … … 860 877 ///of the nodes calculated by the algorithm. 861 878 /// 862 ///\pre Either \ref run( Node) "run()"or \ref init()879 ///\pre Either \ref run() or \ref init() 863 880 ///must be called before using this function. 864 881 const DistMap &distMap() const { return *_dist;} … … 870 887 ///arcs, which form the shortest path tree. 871 888 /// 872 ///\pre Either \ref run( Node) "run()"or \ref init()889 ///\pre Either \ref run() or \ref init() 873 890 ///must be called before using this function. 874 891 const PredMap &predMap() const { return *_pred;} 875 892 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() 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() 881 897 ///must be called before using this function. 882 898 bool reached(Node v) const { return (*_heap_cross_ref)[v] != … … 887 903 ///Returns \c true if \c v is processed, i.e. the shortest 888 904 ///path to \c v has already found. 889 /// 890 ///\pre Either \ref run(Node) "run()" or \ref init() 905 ///\pre Either \ref run() or \ref init() 891 906 ///must be called before using this function. 892 907 bool processed(Node v) const { return (*_heap_cross_ref)[v] == … … 897 912 ///Returns the current distance of a node from the root(s). 898 913 ///It may be decreased in the following processes. 899 /// 900 ///\pre Either \ref run(Node) "run()" or \ref init() 914 ///\pre Either \ref run() or \ref init() 901 915 ///must be called before using this function and 902 916 ///node \c v must be reached but not necessarily processed. … … 1081 1095 /// This auxiliary class is created to implement the 1082 1096 /// \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.1097 /// It does not have own \ref run() method, it uses the functions 1098 /// and features of the plain \ref Dijkstra. 1085 1099 /// 1086 1100 /// This class should only be used through the \ref dijkstra() function, … … 1277 1291 /// bool reached = dijkstra(g,length).path(p).dist(d).run(s,t); 1278 1292 ///\endcode 1279 ///\warning Don't forget to put the \ref DijkstraWizard::run( Node) "run()"1293 ///\warning Don't forget to put the \ref DijkstraWizard::run() "run()" 1280 1294 ///to the end of the parameter list. 1281 1295 ///\sa DijkstraWizard -
scripts/unify-sources.sh
r396 r341 131 131 echo $WARNED_FILES out of $TOTAL_FILES files triggered warnings. 132 132 133 if [ $WARNED_FILES -gt 0 -o $FAILED_FILES -gt 0 ] 133 if [ $FAILED_FILES -gt 0 ] 134 then 135 return 1 136 elif [ $WARNED_FILES -gt 0 ] 134 137 then 135 138 if [ "$WARNING" == 'INTERACTIVE' ] 136 139 then 137 echo -n "Are the files with errors/warnings acceptable? (yes/no) "140 echo -n "Are the files with warnings acceptable? (yes/no) " 138 141 while read answer 139 142 do … … 145 148 return 1 146 149 fi 147 echo -n "Are the files with errors/warnings acceptable? (yes/no) "150 echo -n "Are the files with warnings acceptable? (yes/no) " 148 151 done 149 152 elif [ "$WARNING" == 'WERROR' ] -
test/CMakeLists.txt
r410 r327 14 14 graph_test 15 15 graph_utils_test 16 hao_orlin_test17 16 heap_test 18 17 kruskal_test -
test/Makefile.am
r418 r414 10 10 check_PROGRAMS += \ 11 11 test/bfs_test \ 12 test/circulation_test \13 12 test/counter_test \ 14 13 test/dfs_test \ … … 23 22 test/heap_test \ 24 23 test/kruskal_test \ 25 test/hao_orlin_test \26 24 test/maps_test \ 27 25 test/max_matching_test \ … … 39 37 40 38 test_bfs_test_SOURCES = test/bfs_test.cc 41 test_circulation_test_SOURCES = test/circulation_test.cc42 39 test_counter_test_SOURCES = test/counter_test.cc 43 40 test_dfs_test_SOURCES = test/dfs_test.cc … … 52 49 test_heap_test_SOURCES = test/heap_test.cc 53 50 test_kruskal_test_SOURCES = test/kruskal_test.cc 54 test_hao_orlin_test_SOURCES = test/hao_orlin_test.cc55 51 test_maps_test_SOURCES = test/maps_test.cc 56 52 test_max_matching_test_SOURCES = test/max_matching_test.cc -
test/dijkstra_test.cc
r397 r293 90 90 ::SetProcessedMap<concepts::WriteMap<Node,bool> > 91 91 ::SetStandardProcessedMap 92 ::SetOperationTraits<Dijkstra DefaultOperationTraits<VType> >92 ::SetOperationTraits<DijkstraWidestPathOperationTraits<VType> > 93 93 ::SetHeap<BinHeap<VType, concepts::ReadWriteMap<Node,int> > > 94 94 ::SetStandardHeap<BinHeap<VType, concepts::ReadWriteMap<Node,int> > >
Note: See TracChangeset
for help on using the changeset viewer.