Changes in / [1167:c5990f454032:1168:b78a46fe8002] in lemon
- Files:
-
- 1 added
- 72 edited
Legend:
- Unmodified
- Added
- Removed
-
NEWS
r712 r1096 1 2011-11-09 Version 1.1.5 released 2 3 Bugfix release. 4 5 #428: Add missing lemon/lemon.pc.cmake to the release tarball 6 #429: Fix VS warnings 7 #430: Fix LpBase::Constr two-side limit bug 8 9 2011-08-08 Version 1.1.4 released 10 11 Bugfix release. 12 13 #392: Bug fix in Dfs::start(s,t) 14 #414: Fix wrong initialization in Preflow 15 #404: Update Doxygen configuration 16 #416: Support tests with valgrind 17 #418: Better Win CodeBlock/MinGW support 18 #419: Backport build environment improvements from the main branch 19 - Build of mip_test and lp_test precede the running of the tests 20 - Also search for coin libs under ${COIN_ROOT_DIR}/lib/coin 21 - Do not look for COIN_VOL libraries 22 #382: Allow lgf file without Arc maps 23 24 2010-10-21 Version 1.1.3 released 25 26 Bugfix release. 27 28 #366: Fix Pred[Matrix]MapPath::empty() 29 #371: Bug fix in (di)graphCopy() 30 The target graph is cleared before adding nodes and arcs/edges. 31 32 #356: Fix multiple execution bug in weighted matchings 33 #364: Add missing UndirectedTags 34 #368: Fix the usage of std::numeric_limits<>::min() in Network Simplex 35 #372: Fix a critical bug in preflow 36 37 2010-03-08 Version 1.1.2 released 38 39 Bugfix release. 40 41 #317: Fix (and improve) error message in mip_test.cc 42 Remove unnecessary OsiCbc dependency 43 #250: Fix in pathSource() and pathTarget() 44 #322: Distribute LEMONConfig.cmake.in 45 #321: Use pathCopy(from,to) instead of copyPath(to,from) 46 #330: Bug fix in map_extender.h 47 #335: Fix clear() function in ExtendFindEnum 48 #337: Use void* as LPX object pointer 49 #336: Fix the date field comment of graphToEps() output 50 #323: Bug fix in Suurballe 51 52 2009-10-03 Version 1.1.1 released 53 54 Bugfix release. 55 56 #295: Suppress MSVC warnings using pragmas 57 ----: Various CMAKE related improvements 58 * Remove duplications from doc/CMakeLists.txt 59 * Rename documentation install folder from 'docs' to 'html' 60 * Add tools/CMakeLists.txt to the tarball 61 * Generate and install LEMONConfig.cmake 62 * Change the label of the html project in Visual Studio 63 * Fix the check for the 'long long' type 64 * Put the version string into config.h 65 * Minor CMake improvements 66 * Set the version to 'hg-tip' if everything fails 67 #311: Add missing 'explicit' keywords 68 #302: Fix the implementation and doc of CrossRefMap 69 #308: Remove duplicate list_graph.h entry from source list 70 #307: Bug fix in Preflow and Circulation 71 1 72 2009-05-13 Version 1.1 released 2 73 -
doc/groups.dox
r710 r1081 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-20 095 * Copyright (C) 2003-2011 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). … … 227 227 228 228 /** 229 @defgroup matrices Matrices230 @ingroup datas231 \brief Two dimensional data storages implemented in LEMON.232 233 This group contains two dimensional data storages implemented in LEMON.234 */235 236 /**237 229 @defgroup paths Path Structures 238 230 @ingroup datas … … 284 276 This group contains the algorithms for finding shortest paths in digraphs. 285 277 286 - \ref Dijkstra algorithm for finding shortest paths from a source node 287 when all arc lengths are non-negative. 288 - \ref BellmanFord "Bellman-Ford" algorithm for finding shortest paths 289 from a source node when arc lenghts can be either positive or negative, 290 but the digraph should not contain directed cycles with negative total 291 length. 292 - \ref FloydWarshall "Floyd-Warshall" and \ref Johnson "Johnson" algorithms 293 for solving the \e all-pairs \e shortest \e paths \e problem when arc 294 lenghts can be either positive or negative, but the digraph should 295 not contain directed cycles with negative total length. 278 - \ref Dijkstra Dijkstra's algorithm for finding shortest paths from a 279 source node when all arc lengths are non-negative. 296 280 - \ref Suurballe A successive shortest path algorithm for finding 297 281 arc-disjoint paths between two nodes having minimum total length. … … 318 302 \f[ 0 \leq f(uv) \leq cap(uv) \quad \forall uv\in A \f] 319 303 320 LEMON contains several algorithms for solving maximum flow problems: 321 - \ref EdmondsKarp Edmonds-Karp algorithm. 322 - \ref Preflow Goldberg-Tarjan's preflow push-relabel algorithm. 323 - \ref DinitzSleatorTarjan Dinitz's blocking flow algorithm with dynamic trees. 324 - \ref GoldbergTarjan Preflow push-relabel algorithm with dynamic trees. 325 326 In most cases the \ref Preflow "Preflow" algorithm provides the 327 fastest method for computing a maximum flow. All implementations 328 also provide functions to query the minimum cut, which is the dual 329 problem of maximum flow. 330 331 \ref Circulation is a preflow push-relabel algorithm implemented directly 304 \ref Preflow implements the preflow push-relabel algorithm of Goldberg and 305 Tarjan for solving this problem. It also provides functions to query the 306 minimum cut, which is the dual problem of maximum flow. 307 308 309 \ref Circulation is a preflow push-relabel algorithm implemented directly 332 310 for finding feasible circulations, which is a somewhat different problem, 333 311 but it is strongly related to maximum flow. … … 345 323 solution see \ref min_cost_flow "Minimum Cost Flow Problem". 346 324 347 LEMON contains several algorithms for this problem. 348 - \ref NetworkSimplex Primal Network Simplex algorithm with various 349 pivot strategies. 350 - \ref CostScaling Push-Relabel and Augment-Relabel algorithms based on 351 cost scaling. 352 - \ref CapacityScaling Successive Shortest %Path algorithm with optional 353 capacity scaling. 354 - \ref CancelAndTighten The Cancel and Tighten algorithm. 355 - \ref CycleCanceling Cycle-Canceling algorithms. 356 357 In general NetworkSimplex is the most efficient implementation, 358 but in special cases other algorithms could be faster. 359 For example, if the total supply and/or capacities are rather small, 360 CapacityScaling is usually the fastest algorithm (without effective scaling). 325 \ref NetworkSimplex is an efficient implementation of the primal Network 326 Simplex algorithm for finding minimum cost flows. It also provides dual 327 solution (node potentials), if an optimal flow is found. 361 328 */ 362 329 … … 382 349 - \ref HaoOrlin "Hao-Orlin algorithm" for calculating minimum cut 383 350 in directed graphs. 384 - \ref NagamochiIbaraki "Nagamochi-Ibaraki algorithm" for385 calculating minimum cut in undirected graphs.386 351 - \ref GomoryHu "Gomory-Hu tree computation" for calculating 387 352 all-pairs minimum cut in undirected graphs. … … 404 369 405 370 /** 406 @defgroup planar Planarity Embedding and Drawing407 @ingroup algs408 \brief Algorithms for planarity checking, embedding and drawing409 410 This group contains the algorithms for planarity checking,411 embedding and drawing.412 413 \image html planar.png414 \image latex planar.eps "Plane graph" width=\textwidth415 */416 417 /**418 371 @defgroup matching Matching Algorithms 419 372 @ingroup algs 420 373 \brief Algorithms for finding matchings in graphs and bipartite graphs. 421 374 422 This group contains the algorithms for calculating 423 matchings in graphs and bipartite graphs. The general matching problem is 424 finding a subset of the edges for which each node has at most one incident 425 edge. 375 This group contains the algorithms for calculating matchings in graphs. 376 The general matching problem is finding a subset of the edges for which 377 each node has at most one incident edge. 426 378 427 379 There are several different algorithms for calculate matchings in 428 graphs. The matching problems in bipartite graphs are generally 429 easier than in general graphs. The goal of the matching optimization 380 graphs. The goal of the matching optimization 430 381 can be finding maximum cardinality, maximum weight or minimum cost 431 382 matching. The search can be constrained to find perfect or … … 433 384 434 385 The matching algorithms implemented in LEMON: 435 - \ref MaxBipartiteMatching Hopcroft-Karp augmenting path algorithm436 for calculating maximum cardinality matching in bipartite graphs.437 - \ref PrBipartiteMatching Push-relabel algorithm438 for calculating maximum cardinality matching in bipartite graphs.439 - \ref MaxWeightedBipartiteMatching440 Successive shortest path algorithm for calculating maximum weighted441 matching and maximum weighted bipartite matching in bipartite graphs.442 - \ref MinCostMaxBipartiteMatching443 Successive shortest path algorithm for calculating minimum cost maximum444 matching in bipartite graphs.445 386 - \ref MaxMatching Edmond's blossom shrinking algorithm for calculating 446 387 maximum cardinality matching in general graphs. … … 474 415 475 416 /** 476 @defgroup approx Approximation Algorithms477 @ingroup algs478 \brief Approximation algorithms.479 480 This group contains the approximation and heuristic algorithms481 implemented in LEMON.482 */483 484 /**485 417 @defgroup gen_opt_group General Optimization Tools 486 418 \brief This group contains some general optimization frameworks … … 499 431 various LP solvers could be used in the same manner with this 500 432 interface. 501 */502 503 /**504 @defgroup lp_utils Tools for Lp and Mip Solvers505 @ingroup lp_group506 \brief Helper tools to the Lp and Mip solvers.507 508 This group adds some helper tools to general optimization framework509 implemented in LEMON.510 */511 512 /**513 @defgroup metah Metaheuristics514 @ingroup gen_opt_group515 \brief Metaheuristics for LEMON library.516 517 This group contains some metaheuristic optimization tools.518 433 */ 519 434 -
doc/lgf.dox
r1069 r1081 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-20 095 * Copyright (C) 2003-2011 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
doc/min_cost_flow.dox
r710 r1081 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-20 095 * Copyright (C) 2003-2011 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). … … 82 82 - if \f$\sum_{uv\in A} f(uv) - \sum_{vu\in A} f(vu) \neq sup(u)\f$, 83 83 then \f$\pi(u)=0\f$. 84 84 85 85 Here \f$cost^\pi(uv)\f$ denotes the \e reduced \e cost of the arc 86 86 \f$uv\in A\f$ with respect to the potential function \f$\pi\f$, i.e. … … 120 120 \f[ lower(uv) \leq f(uv) \leq upper(uv) \quad \forall uv\in A \f] 121 121 122 It means that the total demand must be less or equal to the 122 It means that the total demand must be less or equal to the 123 123 total supply (i.e. \f$\sum_{u\in V} sup(u)\f$ must be zero or 124 124 positive) and all the demands have to be satisfied, but there -
lemon/adaptors.h
r1157 r1158 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-20 095 * Copyright (C) 2003-2011 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). … … 419 419 Parent::initialize(digraph); 420 420 _node_filter = &node_filter; 421 _arc_filter = &arc_filter; 421 _arc_filter = &arc_filter; 422 422 } 423 423 … … 506 506 507 507 template <typename V> 508 class NodeMap 509 : public SubMapExtender<SubDigraphBase<DGR, NF, AF, ch>, 510 508 class NodeMap 509 : public SubMapExtender<SubDigraphBase<DGR, NF, AF, ch>, 510 LEMON_SCOPE_FIX(DigraphAdaptorBase<DGR>, NodeMap<V>)> { 511 511 typedef SubMapExtender<SubDigraphBase<DGR, NF, AF, ch>, 512 512 LEMON_SCOPE_FIX(DigraphAdaptorBase<DGR>, NodeMap<V>)> Parent; 513 513 514 514 public: … … 533 533 534 534 template <typename V> 535 class ArcMap 535 class ArcMap 536 536 : public SubMapExtender<SubDigraphBase<DGR, NF, AF, ch>, 537 537 LEMON_SCOPE_FIX(DigraphAdaptorBase<DGR>, ArcMap<V>)> { 538 538 typedef SubMapExtender<SubDigraphBase<DGR, NF, AF, ch>, 539 539 LEMON_SCOPE_FIX(DigraphAdaptorBase<DGR>, ArcMap<V>)> Parent; … … 580 580 Parent::initialize(digraph); 581 581 _node_filter = &node_filter; 582 _arc_filter = &arc_filter; 582 _arc_filter = &arc_filter; 583 583 } 584 584 … … 649 649 650 650 template <typename V> 651 class NodeMap 651 class NodeMap 652 652 : public SubMapExtender<SubDigraphBase<DGR, NF, AF, false>, 653 653 LEMON_SCOPE_FIX(DigraphAdaptorBase<DGR>, NodeMap<V>)> { 654 typedef SubMapExtender<SubDigraphBase<DGR, NF, AF, false>, 654 typedef SubMapExtender<SubDigraphBase<DGR, NF, AF, false>, 655 655 LEMON_SCOPE_FIX(DigraphAdaptorBase<DGR>, NodeMap<V>)> Parent; 656 656 … … 676 676 677 677 template <typename V> 678 class ArcMap 678 class ArcMap 679 679 : public SubMapExtender<SubDigraphBase<DGR, NF, AF, false>, 680 680 LEMON_SCOPE_FIX(DigraphAdaptorBase<DGR>, ArcMap<V>)> { … … 1017 1017 1018 1018 template <typename V> 1019 class NodeMap 1019 class NodeMap 1020 1020 : public SubMapExtender<SubGraphBase<GR, NF, EF, ch>, 1021 1021 LEMON_SCOPE_FIX(GraphAdaptorBase<GR>, NodeMap<V>)> { 1022 typedef SubMapExtender<SubGraphBase<GR, NF, EF, ch>, 1022 typedef SubMapExtender<SubGraphBase<GR, NF, EF, ch>, 1023 1023 LEMON_SCOPE_FIX(GraphAdaptorBase<GR>, NodeMap<V>)> Parent; 1024 1024 … … 1044 1044 1045 1045 template <typename V> 1046 class ArcMap 1046 class ArcMap 1047 1047 : public SubMapExtender<SubGraphBase<GR, NF, EF, ch>, 1048 1048 LEMON_SCOPE_FIX(GraphAdaptorBase<GR>, ArcMap<V>)> { 1049 typedef SubMapExtender<SubGraphBase<GR, NF, EF, ch>, 1049 typedef SubMapExtender<SubGraphBase<GR, NF, EF, ch>, 1050 1050 LEMON_SCOPE_FIX(GraphAdaptorBase<GR>, ArcMap<V>)> Parent; 1051 1051 … … 1071 1071 1072 1072 template <typename V> 1073 class EdgeMap 1073 class EdgeMap 1074 1074 : public SubMapExtender<SubGraphBase<GR, NF, EF, ch>, 1075 1075 LEMON_SCOPE_FIX(GraphAdaptorBase<GR>, EdgeMap<V>)> { 1076 typedef SubMapExtender<SubGraphBase<GR, NF, EF, ch>, 1076 typedef SubMapExtender<SubGraphBase<GR, NF, EF, ch>, 1077 1077 LEMON_SCOPE_FIX(GraphAdaptorBase<GR>, EdgeMap<V>)> Parent; 1078 1078 … … 1113 1113 NF* _node_filter; 1114 1114 EF* _edge_filter; 1115 SubGraphBase() 1116 1115 SubGraphBase() 1116 : Parent(), _node_filter(0), _edge_filter(0) { } 1117 1117 1118 1118 void initialize(GR& graph, NF& node_filter, EF& edge_filter) { … … 1215 1215 1216 1216 template <typename V> 1217 class NodeMap 1217 class NodeMap 1218 1218 : public SubMapExtender<SubGraphBase<GR, NF, EF, false>, 1219 1219 LEMON_SCOPE_FIX(GraphAdaptorBase<GR>, NodeMap<V>)> { 1220 typedef SubMapExtender<SubGraphBase<GR, NF, EF, false>, 1220 typedef SubMapExtender<SubGraphBase<GR, NF, EF, false>, 1221 1221 LEMON_SCOPE_FIX(GraphAdaptorBase<GR>, NodeMap<V>)> Parent; 1222 1222 … … 1242 1242 1243 1243 template <typename V> 1244 class ArcMap 1244 class ArcMap 1245 1245 : public SubMapExtender<SubGraphBase<GR, NF, EF, false>, 1246 1246 LEMON_SCOPE_FIX(GraphAdaptorBase<GR>, ArcMap<V>)> { 1247 typedef SubMapExtender<SubGraphBase<GR, NF, EF, false>, 1247 typedef SubMapExtender<SubGraphBase<GR, NF, EF, false>, 1248 1248 LEMON_SCOPE_FIX(GraphAdaptorBase<GR>, ArcMap<V>)> Parent; 1249 1249 … … 1269 1269 1270 1270 template <typename V> 1271 class EdgeMap 1271 class EdgeMap 1272 1272 : public SubMapExtender<SubGraphBase<GR, NF, EF, false>, 1273 1273 LEMON_SCOPE_FIX(GraphAdaptorBase<GR>, EdgeMap<V>)> { 1274 typedef SubMapExtender<SubGraphBase<GR, NF, EF, false>, 1275 1274 typedef SubMapExtender<SubGraphBase<GR, NF, EF, false>, 1275 LEMON_SCOPE_FIX(GraphAdaptorBase<GR>, EdgeMap<V>)> Parent; 1276 1276 1277 1277 public: … … 1496 1496 #endif 1497 1497 typedef DigraphAdaptorExtender< 1498 SubDigraphBase<GR, NF, ConstMap<typename GR::Arc, Const<bool, true> >, 1498 SubDigraphBase<GR, NF, ConstMap<typename GR::Arc, Const<bool, true> >, 1499 1499 true> > Parent; 1500 1500 … … 1517 1517 /// Creates a subgraph for the given digraph or graph with the 1518 1518 /// given node filter map. 1519 FilterNodes(GR& graph, NF& node_filter) 1519 FilterNodes(GR& graph, NF& node_filter) 1520 1520 : Parent(), const_true_map() 1521 1521 { … … 1555 1555 typename enable_if<UndirectedTagIndicator<GR> >::type> : 1556 1556 public GraphAdaptorExtender< 1557 SubGraphBase<GR, NF, ConstMap<typename GR::Edge, Const<bool, true> >, 1557 SubGraphBase<GR, NF, ConstMap<typename GR::Edge, Const<bool, true> >, 1558 1558 true> > { 1559 1559 1560 1560 typedef GraphAdaptorExtender< 1561 SubGraphBase<GR, NF, ConstMap<typename GR::Edge, Const<bool, true> >, 1561 SubGraphBase<GR, NF, ConstMap<typename GR::Edge, Const<bool, true> >, 1562 1562 true> > Parent; 1563 1563 … … 1643 1643 #endif 1644 1644 typedef DigraphAdaptorExtender< 1645 SubDigraphBase<DGR, ConstMap<typename DGR::Node, Const<bool, true> >, 1645 SubDigraphBase<DGR, ConstMap<typename DGR::Node, Const<bool, true> >, 1646 1646 AF, false> > Parent; 1647 1647 … … 1749 1749 class FilterEdges : 1750 1750 public GraphAdaptorExtender< 1751 SubGraphBase<GR, ConstMap<typename GR::Node, Const<bool, true> >, 1751 SubGraphBase<GR, ConstMap<typename GR::Node, Const<bool, true> >, 1752 1752 EF, false> > { 1753 1753 #endif 1754 1754 typedef GraphAdaptorExtender< 1755 SubGraphBase<GR, ConstMap<typename GR::Node, Const<bool, true > >, 1755 SubGraphBase<GR, ConstMap<typename GR::Node, Const<bool, true > >, 1756 1756 EF, false> > Parent; 1757 1757 … … 1778 1778 /// Creates a subgraph for the given graph with the given edge 1779 1779 /// filter map. 1780 FilterEdges(GR& graph, EF& edge_filter) 1780 FilterEdges(GR& graph, EF& edge_filter) 1781 1781 : Parent(), const_true_map() { 1782 1782 Parent::initialize(graph, const_true_map, edge_filter); … … 1846 1846 bool _forward; 1847 1847 1848 Arc(const Edge& edge, bool forward) 1848 Arc(const Edge& edge, bool forward) 1849 1849 : _edge(edge), _forward(forward) {} 1850 1850 … … 2086 2086 2087 2087 ArcMapBase(const UndirectorBase<DGR>& adaptor, const V& value) 2088 : _forward(*adaptor._digraph, value), 2088 : _forward(*adaptor._digraph, value), 2089 2089 _backward(*adaptor._digraph, value) {} 2090 2090 … … 2204 2204 typedef typename ItemSetTraits<DGR, Edge>::ItemNotifier EdgeNotifier; 2205 2205 EdgeNotifier& notifier(Edge) const { return _digraph->notifier(Edge()); } 2206 2206 2207 2207 typedef EdgeNotifier ArcNotifier; 2208 2208 ArcNotifier& notifier(Arc) const { return _digraph->notifier(Edge()); } … … 2708 2708 typename FM = CM, 2709 2709 typename TL = Tolerance<typename CM::Value> > 2710 class ResidualDigraph 2710 class ResidualDigraph 2711 2711 : public SubDigraph< 2712 2712 Undirector<const DGR>, … … 2765 2765 ResidualDigraph(const DGR& digraph, const CM& capacity, 2766 2766 FM& flow, const TL& tolerance = Tolerance()) 2767 : Parent(), _capacity(&capacity), _flow(&flow), 2767 : Parent(), _capacity(&capacity), _flow(&flow), 2768 2768 _graph(digraph), _node_filter(), 2769 2769 _forward_filter(capacity, flow, tolerance), … … 2847 2847 2848 2848 /// Constructor 2849 ResidualCapacity(const ResidualDigraph<DGR, CM, FM, TL>& adaptor) 2849 ResidualCapacity(const ResidualDigraph<DGR, CM, FM, TL>& adaptor) 2850 2850 : _adaptor(&adaptor) {} 2851 2851 … … 3424 3424 /// to get a node map of the split digraph. 3425 3425 /// Its value type is inherited from the first node map type (\c IN). 3426 /// \tparam IN The type of the node map for the in-nodes. 3426 /// \tparam IN The type of the node map for the in-nodes. 3427 3427 /// \tparam OUT The type of the node map for the out-nodes. 3428 3428 template <typename IN, typename OUT> -
lemon/bin_heap.h
r730 r1081 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-20 095 * Copyright (C) 2003-2011 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
lemon/bits/array_map.h
r664 r1081 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-20 095 * Copyright (C) 2003-2011 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). … … 71 71 72 72 private: 73 73 74 74 // The MapBase of the Map which imlements the core regisitry function. 75 75 typedef typename Notifier::ObserverBase Parent; -
lemon/bits/default_map.h
r674 r1081 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-20 095 * Copyright (C) 2003-2011 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). … … 158 158 public: 159 159 typedef DefaultMap<_Graph, _Item, _Value> Map; 160 160 161 161 typedef typename Parent::GraphType GraphType; 162 162 typedef typename Parent::Value Value; -
lemon/bits/edge_set_extender.h
r1157 r1158 1 /* -*- C++-*-1 /* -*- mode: C++; indent-tabs-mode: nil; -*- 2 2 * 3 * This file is a part of LEMON, a generic C++ optimization library 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-20 085 * Copyright (C) 2003-2011 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). … … 64 64 Node oppositeNode(const Node &n, const Arc &e) const { 65 65 if (n == Parent::source(e)) 66 66 return Parent::target(e); 67 67 else if(n==Parent::target(e)) 68 68 return Parent::source(e); 69 69 else 70 70 return INVALID; 71 71 } 72 72 … … 92 92 // Iterable extensions 93 93 94 class NodeIt : public Node { 94 class NodeIt : public Node { 95 95 const Digraph* digraph; 96 96 public: … … 101 101 102 102 explicit NodeIt(const Digraph& _graph) : digraph(&_graph) { 103 104 } 105 106 NodeIt(const Digraph& _graph, const Node& node) 107 108 109 NodeIt& operator++() { 110 111 return *this; 112 } 113 114 }; 115 116 117 class ArcIt : public Arc { 103 _graph.first(static_cast<Node&>(*this)); 104 } 105 106 NodeIt(const Digraph& _graph, const Node& node) 107 : Node(node), digraph(&_graph) {} 108 109 NodeIt& operator++() { 110 digraph->next(*this); 111 return *this; 112 } 113 114 }; 115 116 117 class ArcIt : public Arc { 118 118 const Digraph* digraph; 119 119 public: … … 124 124 125 125 explicit ArcIt(const Digraph& _graph) : digraph(&_graph) { 126 127 } 128 129 ArcIt(const Digraph& _graph, const Arc& e) : 130 131 132 ArcIt& operator++() { 133 134 return *this; 135 } 136 137 }; 138 139 140 class OutArcIt : public Arc { 126 _graph.first(static_cast<Arc&>(*this)); 127 } 128 129 ArcIt(const Digraph& _graph, const Arc& e) : 130 Arc(e), digraph(&_graph) { } 131 132 ArcIt& operator++() { 133 digraph->next(*this); 134 return *this; 135 } 136 137 }; 138 139 140 class OutArcIt : public Arc { 141 141 const Digraph* digraph; 142 142 public: … … 146 146 OutArcIt(Invalid i) : Arc(i) { } 147 147 148 OutArcIt(const Digraph& _graph, const Node& node) 149 150 151 } 152 153 OutArcIt(const Digraph& _graph, const Arc& arc) 154 155 156 OutArcIt& operator++() { 157 158 return *this; 159 } 160 161 }; 162 163 164 class InArcIt : public Arc { 148 OutArcIt(const Digraph& _graph, const Node& node) 149 : digraph(&_graph) { 150 _graph.firstOut(*this, node); 151 } 152 153 OutArcIt(const Digraph& _graph, const Arc& arc) 154 : Arc(arc), digraph(&_graph) {} 155 156 OutArcIt& operator++() { 157 digraph->nextOut(*this); 158 return *this; 159 } 160 161 }; 162 163 164 class InArcIt : public Arc { 165 165 const Digraph* digraph; 166 166 public: … … 170 170 InArcIt(Invalid i) : Arc(i) { } 171 171 172 InArcIt(const Digraph& _graph, const Node& node) 173 174 175 } 176 177 InArcIt(const Digraph& _graph, const Arc& arc) : 178 179 180 InArcIt& operator++() { 181 182 return *this; 172 InArcIt(const Digraph& _graph, const Node& node) 173 : digraph(&_graph) { 174 _graph.firstIn(*this, node); 175 } 176 177 InArcIt(const Digraph& _graph, const Arc& arc) : 178 Arc(arc), digraph(&_graph) {} 179 180 InArcIt& operator++() { 181 digraph->nextIn(*this); 182 return *this; 183 183 } 184 184 … … 216 216 217 217 // Mappable extension 218 218 219 219 template <typename _Value> 220 class ArcMap 220 class ArcMap 221 221 : public MapExtender<DefaultMap<Digraph, Arc, _Value> > { 222 222 typedef MapExtender<DefaultMap<Digraph, Arc, _Value> > Parent; 223 223 224 224 public: 225 explicit ArcMap(const Digraph& _g) 226 227 ArcMap(const Digraph& _g, const _Value& _v) 228 225 explicit ArcMap(const Digraph& _g) 226 : Parent(_g) {} 227 ArcMap(const Digraph& _g, const _Value& _v) 228 : Parent(_g, _v) {} 229 229 230 230 ArcMap& operator=(const ArcMap& cmap) { 231 231 return operator=<ArcMap>(cmap); 232 232 } 233 233 … … 235 235 ArcMap& operator=(const CMap& cmap) { 236 236 Parent::operator=(cmap); 237 237 return *this; 238 238 } 239 239 … … 248 248 return arc; 249 249 } 250 250 251 251 void clear() { 252 252 notifier(Arc()).clear(); … … 313 313 Node oppositeNode(const Node &n, const Edge &e) const { 314 314 if( n == Parent::u(e)) 315 315 return Parent::v(e); 316 316 else if( n == Parent::v(e)) 317 317 return Parent::u(e); 318 318 else 319 319 return INVALID; 320 320 } 321 321 … … 341 341 342 342 using Parent::notifier; 343 343 344 344 ArcNotifier& notifier(Arc) const { 345 345 return arc_notifier; … … 351 351 352 352 353 class NodeIt : public Node { 353 class NodeIt : public Node { 354 354 const Graph* graph; 355 355 public: … … 360 360 361 361 explicit NodeIt(const Graph& _graph) : graph(&_graph) { 362 363 } 364 365 NodeIt(const Graph& _graph, const Node& node) 366 367 368 NodeIt& operator++() { 369 370 return *this; 371 } 372 373 }; 374 375 376 class ArcIt : public Arc { 362 _graph.first(static_cast<Node&>(*this)); 363 } 364 365 NodeIt(const Graph& _graph, const Node& node) 366 : Node(node), graph(&_graph) {} 367 368 NodeIt& operator++() { 369 graph->next(*this); 370 return *this; 371 } 372 373 }; 374 375 376 class ArcIt : public Arc { 377 377 const Graph* graph; 378 378 public: … … 383 383 384 384 explicit ArcIt(const Graph& _graph) : graph(&_graph) { 385 386 } 387 388 ArcIt(const Graph& _graph, const Arc& e) : 389 390 391 ArcIt& operator++() { 392 393 return *this; 394 } 395 396 }; 397 398 399 class OutArcIt : public Arc { 385 _graph.first(static_cast<Arc&>(*this)); 386 } 387 388 ArcIt(const Graph& _graph, const Arc& e) : 389 Arc(e), graph(&_graph) { } 390 391 ArcIt& operator++() { 392 graph->next(*this); 393 return *this; 394 } 395 396 }; 397 398 399 class OutArcIt : public Arc { 400 400 const Graph* graph; 401 401 public: … … 405 405 OutArcIt(Invalid i) : Arc(i) { } 406 406 407 OutArcIt(const Graph& _graph, const Node& node) 408 409 410 } 411 412 OutArcIt(const Graph& _graph, const Arc& arc) 413 414 415 OutArcIt& operator++() { 416 417 return *this; 418 } 419 420 }; 421 422 423 class InArcIt : public Arc { 407 OutArcIt(const Graph& _graph, const Node& node) 408 : graph(&_graph) { 409 _graph.firstOut(*this, node); 410 } 411 412 OutArcIt(const Graph& _graph, const Arc& arc) 413 : Arc(arc), graph(&_graph) {} 414 415 OutArcIt& operator++() { 416 graph->nextOut(*this); 417 return *this; 418 } 419 420 }; 421 422 423 class InArcIt : public Arc { 424 424 const Graph* graph; 425 425 public: … … 429 429 InArcIt(Invalid i) : Arc(i) { } 430 430 431 InArcIt(const Graph& _graph, const Node& node) 432 433 434 } 435 436 InArcIt(const Graph& _graph, const Arc& arc) : 437 438 439 InArcIt& operator++() { 440 441 return *this; 442 } 443 444 }; 445 446 447 class EdgeIt : public Parent::Edge { 431 InArcIt(const Graph& _graph, const Node& node) 432 : graph(&_graph) { 433 _graph.firstIn(*this, node); 434 } 435 436 InArcIt(const Graph& _graph, const Arc& arc) : 437 Arc(arc), graph(&_graph) {} 438 439 InArcIt& operator++() { 440 graph->nextIn(*this); 441 return *this; 442 } 443 444 }; 445 446 447 class EdgeIt : public Parent::Edge { 448 448 const Graph* graph; 449 449 public: … … 454 454 455 455 explicit EdgeIt(const Graph& _graph) : graph(&_graph) { 456 457 } 458 459 EdgeIt(const Graph& _graph, const Edge& e) : 460 461 462 EdgeIt& operator++() { 463 464 return *this; 456 _graph.first(static_cast<Edge&>(*this)); 457 } 458 459 EdgeIt(const Graph& _graph, const Edge& e) : 460 Edge(e), graph(&_graph) { } 461 462 EdgeIt& operator++() { 463 graph->next(*this); 464 return *this; 465 465 } 466 466 … … 478 478 479 479 IncEdgeIt(const Graph& _graph, const Node &n) : graph(&_graph) { 480 480 _graph.firstInc(*this, direction, n); 481 481 } 482 482 483 483 IncEdgeIt(const Graph& _graph, const Edge &ue, const Node &n) 484 485 484 : graph(&_graph), Edge(ue) { 485 direction = (_graph.source(ue) == n); 486 486 } 487 487 488 488 IncEdgeIt& operator++() { 489 490 return *this; 489 graph->nextInc(*this, direction); 490 return *this; 491 491 } 492 492 }; … … 535 535 536 536 template <typename _Value> 537 class ArcMap 537 class ArcMap 538 538 : public MapExtender<DefaultMap<Graph, Arc, _Value> > { 539 539 typedef MapExtender<DefaultMap<Graph, Arc, _Value> > Parent; 540 540 541 541 public: 542 explicit ArcMap(const Graph& _g) 543 544 ArcMap(const Graph& _g, const _Value& _v) 545 542 explicit ArcMap(const Graph& _g) 543 : Parent(_g) {} 544 ArcMap(const Graph& _g, const _Value& _v) 545 : Parent(_g, _v) {} 546 546 547 547 ArcMap& operator=(const ArcMap& cmap) { 548 548 return operator=<ArcMap>(cmap); 549 549 } 550 550 … … 552 552 ArcMap& operator=(const CMap& cmap) { 553 553 Parent::operator=(cmap); 554 554 return *this; 555 555 } 556 556 … … 559 559 560 560 template <typename _Value> 561 class EdgeMap 561 class EdgeMap 562 562 : public MapExtender<DefaultMap<Graph, Edge, _Value> > { 563 563 typedef MapExtender<DefaultMap<Graph, Edge, _Value> > Parent; 564 564 565 565 public: 566 explicit EdgeMap(const Graph& _g) 567 568 569 EdgeMap(const Graph& _g, const _Value& _v) 570 566 explicit EdgeMap(const Graph& _g) 567 : Parent(_g) {} 568 569 EdgeMap(const Graph& _g, const _Value& _v) 570 : Parent(_g, _v) {} 571 571 572 572 EdgeMap& operator=(const EdgeMap& cmap) { 573 573 return operator=<EdgeMap>(cmap); 574 574 } 575 575 … … 577 577 EdgeMap& operator=(const CMap& cmap) { 578 578 Parent::operator=(cmap); 579 579 return *this; 580 580 } 581 581 … … 594 594 return edge; 595 595 } 596 596 597 597 void clear() { 598 598 notifier(Arc()).clear(); … … 620 620 arc_notifier.clear(); 621 621 } 622 622 623 623 }; 624 624 -
lemon/bits/graph_adaptor_extender.h
r965 r1081 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-20 095 * Copyright (C) 2003-2011 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
lemon/bits/map_extender.h
r867 r1081 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-20 095 * Copyright (C) 2003-2011 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
lemon/bits/path_dump.h
r973 r1081 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-20 095 * Copyright (C) 2003-2011 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
lemon/bits/solver_bits.h
r1140 r1141 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-20 085 * Copyright (C) 2003-2011 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
lemon/bits/windows.cc
r1053 r1081 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-20 095 * Copyright (C) 2003-2011 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). … … 99 99 GetSystemTime(&time); 100 100 char buf1[11], buf2[9], buf3[5]; 101 101 if (GetDateFormat(MY_LOCALE, 0, &time, 102 102 ("ddd MMM dd"), buf1, 11) && 103 103 GetTimeFormat(MY_LOCALE, 0, &time, -
lemon/cbc.h
r623 r1081 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-20 095 * Copyright (C) 2003-2011 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). … … 121 121 int _message_level; 122 122 123 123 124 124 125 125 }; -
lemon/circulation.h
r1157 r1158 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-20 095 * Copyright (C) 2003-2011 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). … … 60 60 /// \brief The type of supply map. 61 61 /// 62 /// The type of the map that stores the signed supply values of the 63 /// nodes. 62 /// The type of the map that stores the signed supply values of the 63 /// nodes. 64 64 /// It must conform to the \ref concepts::ReadMap "ReadMap" concept. 65 65 typedef SM SupplyMap; … … 135 135 \geq sup(u) \quad \forall u\in V, \f] 136 136 \f[ lower(uv) \leq f(uv) \leq upper(uv) \quad \forall uv\in A. \f] 137 137 138 138 The sum of the supply values, i.e. \f$\sum_{u\in V} sup(u)\f$ must be 139 139 zero or negative in order to have a feasible solution (since the sum … … 145 145 constraints have to be satisfied with equality, i.e. all demands 146 146 have to be satisfied and all supplies have to be used. 147 147 148 148 If you need the opposite inequalities in the supply/demand constraints 149 149 (i.e. the total demand is less than the total supply and all the demands … … 326 326 /// \param graph The digraph the algorithm runs on. 327 327 /// \param lower The lower bounds for the flow values on the arcs. 328 /// \param upper The upper bounds (capacities) for the flow values 328 /// \param upper The upper bounds (capacities) for the flow values 329 329 /// on the arcs. 330 330 /// \param supply The signed supply values of the nodes. -
lemon/clp.cc
r1140 r1141 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-20 085 * Copyright (C) 2003-2011 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
lemon/clp.h
r623 r1081 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-20 085 * Copyright (C) 2003-2011 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). … … 138 138 139 139 virtual void _messageLevel(MessageLevel); 140 140 141 141 public: 142 142 -
lemon/concepts/digraph.h
r627 r1081 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-20 095 * Copyright (C) 2003-2011 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). … … 436 436 private: 437 437 ///Copy constructor 438 NodeMap(const NodeMap& nm) : 438 NodeMap(const NodeMap& nm) : 439 439 ReferenceMap<Node, T, T&, const T&>(nm) { } 440 440 ///Assignment operator -
lemon/concepts/graph_components.h
r1157 r1158 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-20 095 * Copyright (C) 2003-2011 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). … … 39 39 /// \note This class is a template class so that we can use it to 40 40 /// create graph skeleton classes. The reason for this is that \c Node 41 /// and \c Arc (or \c Edge) types should \e not derive from the same 41 /// and \c Arc (or \c Edge) types should \e not derive from the same 42 42 /// base class. For \c Node you should instantiate it with character 43 43 /// \c 'n', for \c Arc with \c 'a' and for \c Edge with \c 'e'. … … 90 90 /// 91 91 /// This operator defines an ordering of the items. 92 /// It makes possible to use graph item types as key types in 92 /// It makes possible to use graph item types as key types in 93 93 /// associative containers (e.g. \c std::map). 94 94 /// … … 124 124 /// This class describes the base interface of directed graph types. 125 125 /// All digraph %concepts have to conform to this class. 126 /// It just provides types for nodes and arcs and functions 126 /// It just provides types for nodes and arcs and functions 127 127 /// to get the source and the target nodes of arcs. 128 128 class BaseDigraphComponent { … … 432 432 /// \brief Concept class for \c NodeIt, \c ArcIt and \c EdgeIt types. 433 433 /// 434 /// This class describes the concept of \c NodeIt, \c ArcIt and 434 /// This class describes the concept of \c NodeIt, \c ArcIt and 435 435 /// \c EdgeIt subtypes of digraph and graph types. 436 436 template <typename GR, typename Item> … … 472 472 /// next item. 473 473 GraphItemIt& operator++() { return *this; } 474 474 475 475 /// \brief Equality operator 476 476 /// … … 510 510 }; 511 511 512 /// \brief Concept class for \c InArcIt, \c OutArcIt and 512 /// \brief Concept class for \c InArcIt, \c OutArcIt and 513 513 /// \c IncEdgeIt types. 514 514 /// 515 /// This class describes the concept of \c InArcIt, \c OutArcIt 515 /// This class describes the concept of \c InArcIt, \c OutArcIt 516 516 /// and \c IncEdgeIt subtypes of digraph and graph types. 517 517 /// 518 518 /// \note Since these iterator classes do not inherit from the same 519 519 /// base class, there is an additional template parameter (selector) 520 /// \c sel. For \c InArcIt you should instantiate it with character 520 /// \c sel. For \c InArcIt you should instantiate it with character 521 521 /// \c 'i', for \c OutArcIt with \c 'o' and for \c IncEdgeIt with \c 'e'. 522 522 template <typename GR, … … 539 539 GraphIncIt(const GraphIncIt& it) : Item(it) {} 540 540 541 /// \brief Constructor that sets the iterator to the first 541 /// \brief Constructor that sets the iterator to the first 542 542 /// incoming or outgoing arc. 543 543 /// 544 /// Constructor that sets the iterator to the first arc 544 /// Constructor that sets the iterator to the first arc 545 545 /// incoming to or outgoing from the given node. 546 546 explicit GraphIncIt(const GR&, const Base&) {} … … 817 817 /// \brief Return the first edge incident to the given node. 818 818 /// 819 /// This function gives back the first edge incident to the given 819 /// This function gives back the first edge incident to the given 820 820 /// node. The bool parameter gives back the direction for which the 821 /// source node of the directed arc representing the edge is the 821 /// source node of the directed arc representing the edge is the 822 822 /// given node. 823 823 void firstInc(Edge&, bool&, const Node&) const {} … … 826 826 /// given node. 827 827 /// 828 /// This function gives back the next edge incident to the given 828 /// This function gives back the next edge incident to the given 829 829 /// node. The bool parameter should be used as \c firstInc() use it. 830 830 void nextInc(Edge&, bool&) const {} … … 1006 1006 /// 1007 1007 /// This class describes the concept of standard graph maps, i.e. 1008 /// the \c NodeMap, \c ArcMap and \c EdgeMap subtypes of digraph and 1008 /// the \c NodeMap, \c ArcMap and \c EdgeMap subtypes of digraph and 1009 1009 /// graph types, which can be used for associating data to graph items. 1010 1010 /// The standard graph maps must conform to the ReferenceMap concept. … … 1061 1061 _Map m1(g); 1062 1062 _Map m2(g,t); 1063 1063 1064 1064 // Copy constructor 1065 1065 // _Map m3(m); … … 1085 1085 /// 1086 1086 /// This class describes the interface of mappable directed graphs. 1087 /// It extends \ref BaseDigraphComponent with the standard digraph 1087 /// It extends \ref BaseDigraphComponent with the standard digraph 1088 1088 /// map classes, namely \c NodeMap and \c ArcMap. 1089 1089 /// This concept is part of the Digraph concept. … … 1223 1223 /// 1224 1224 /// This class describes the interface of mappable undirected graphs. 1225 /// It extends \ref MappableDigraphComponent with the standard graph 1225 /// It extends \ref MappableDigraphComponent with the standard graph 1226 1226 /// map class for edges (\c EdgeMap). 1227 1227 /// This concept is part of the Graph concept. … … 1309 1309 /// 1310 1310 /// This class describes the interface of extendable directed graphs. 1311 /// It extends \ref BaseDigraphComponent with functions for adding 1311 /// It extends \ref BaseDigraphComponent with functions for adding 1312 1312 /// nodes and arcs to the digraph. 1313 1313 /// This concept requires \ref AlterableDigraphComponent. … … 1354 1354 /// 1355 1355 /// This class describes the interface of extendable undirected graphs. 1356 /// It extends \ref BaseGraphComponent with functions for adding 1356 /// It extends \ref BaseGraphComponent with functions for adding 1357 1357 /// nodes and edges to the graph. 1358 1358 /// This concept requires \ref AlterableGraphComponent. … … 1399 1399 /// 1400 1400 /// This class describes the interface of erasable directed graphs. 1401 /// It extends \ref BaseDigraphComponent with functions for removing 1401 /// It extends \ref BaseDigraphComponent with functions for removing 1402 1402 /// nodes and arcs from the digraph. 1403 1403 /// This concept requires \ref AlterableDigraphComponent. … … 1412 1412 /// \brief Erase a node from the digraph. 1413 1413 /// 1414 /// This function erases the given node from the digraph and all arcs 1414 /// This function erases the given node from the digraph and all arcs 1415 1415 /// connected to the node. 1416 1416 void erase(const Node&) {} … … 1439 1439 /// 1440 1440 /// This class describes the interface of erasable undirected graphs. 1441 /// It extends \ref BaseGraphComponent with functions for removing 1441 /// It extends \ref BaseGraphComponent with functions for removing 1442 1442 /// nodes and edges from the graph. 1443 1443 /// This concept requires \ref AlterableGraphComponent. -
lemon/concepts/maps.h
r1157 r1158 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-20 095 * Copyright (C) 2003-2011 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
lemon/connectivity.h
r695 r1081 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-20 095 * Copyright (C) 2003-2011 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). … … 259 259 /// \return \c true if the digraph is strongly connected. 260 260 /// \note By definition, the empty digraph is strongly connected. 261 /// 261 /// 262 262 /// \see countStronglyConnectedComponents(), stronglyConnectedComponents() 263 263 /// \see connected() … … 311 311 /// \ingroup graph_properties 312 312 /// 313 /// \brief Count the number of strongly connected components of a 313 /// \brief Count the number of strongly connected components of a 314 314 /// directed graph 315 315 /// … … 745 745 /// \brief Check whether an undirected graph is bi-node-connected. 746 746 /// 747 /// This function checks whether the given undirected graph is 747 /// This function checks whether the given undirected graph is 748 748 /// bi-node-connected, i.e. any two edges are on same circle. 749 749 /// … … 759 759 /// \ingroup graph_properties 760 760 /// 761 /// \brief Count the number of bi-node-connected components of an 761 /// \brief Count the number of bi-node-connected components of an 762 762 /// undirected graph. 763 763 /// … … 813 813 /// \retval compMap A writable edge map. The values will be set from 0 814 814 /// to the number of the bi-node-connected components minus one. Each 815 /// value of the map will be set exactly once, and the values of a 815 /// value of the map will be set exactly once, and the values of a 816 816 /// certain component will be set continuously. 817 817 /// \return The number of bi-node-connected components. … … 859 859 /// 860 860 /// \param graph The undirected graph. 861 /// \retval cutMap A writable node map. The values will be set to 861 /// \retval cutMap A writable node map. The values will be set to 862 862 /// \c true for the nodes that separate two or more components 863 863 /// (exactly once for each cut node), and will not be changed for … … 1086 1086 /// \brief Check whether an undirected graph is bi-edge-connected. 1087 1087 /// 1088 /// This function checks whether the given undirected graph is 1088 /// This function checks whether the given undirected graph is 1089 1089 /// bi-edge-connected, i.e. any two nodes are connected with at least 1090 1090 /// two edge-disjoint paths. … … 1193 1193 /// 1194 1194 /// This function finds the bi-edge-connected cut edges in the given 1195 /// undirected graph. 1195 /// undirected graph. 1196 1196 /// 1197 1197 /// The bi-edge-connected components are the classes of an equivalence … … 1350 1350 /// \param digraph The digraph. 1351 1351 /// \retval order A readable and writable node map. The values will be 1352 /// set from 0 to the number of the nodes in the digraph minus one. 1352 /// set from 0 to the number of the nodes in the digraph minus one. 1353 1353 /// Each value of the map will be set exactly once, and the values will 1354 1354 /// be set descending order. -
lemon/core.h
r1149 r1150 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-20 095 * Copyright (C) 2003-2011 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). … … 1242 1242 protected: 1243 1243 1244 class AutoNodeMap : public ItemSetTraits<GR, Node>::template Map<Arc>::Type { 1244 class AutoNodeMap : 1245 public ItemSetTraits<GR, Node>::template Map<Arc>::Type { 1245 1246 typedef typename ItemSetTraits<GR, Node>::template Map<Arc>::Type Parent; 1246 1247 … … 1281 1282 }; 1282 1283 1283 protected: 1284 protected: 1284 1285 1285 1286 const Digraph &_g; -
lemon/cplex.cc
r1140 r1141 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-20 095 * Copyright (C) 2003-2011 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). … … 455 455 456 456 void CplexBase::_applyMessageLevel() { 457 CPXsetintparam(cplexEnv(), CPX_PARAM_SCRIND, 457 CPXsetintparam(cplexEnv(), CPX_PARAM_SCRIND, 458 458 _message_enabled ? CPX_ON : CPX_OFF); 459 459 } -
lemon/dfs.h
r1125 r1126 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-20 095 * Copyright (C) 2003-2011 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
lemon/dimacs.h
r631 r1081 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-20 095 * Copyright (C) 2003-2011 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). … … 62 62 63 63 ///This function starts seeking the beginning of the given file for the 64 ///problem type and size info. 64 ///problem type and size info. 65 65 ///The found data is returned in a special struct that can be evaluated 66 66 ///and passed to the appropriate reader function. … … 213 213 std::numeric_limits<Capacity>::infinity() : 214 214 std::numeric_limits<Capacity>::max(); 215 215 216 216 while (is >> c) { 217 217 switch (c) { … … 238 238 e = g.addArc(nodes[i], nodes[j]); 239 239 capacity.set(e, _cap); 240 } 240 } 241 241 else if (desc.type==DimacsDescriptor::MAX) { 242 242 is >> i >> j >> _cap; … … 363 363 g.addArc(s,t); 364 364 } 365 365 366 366 /// \brief DIMACS plain (di)graph reader function. 367 367 /// 368 368 /// This function reads a plain (di)graph without any designated nodes 369 /// and maps (e.g. a matching instance) from DIMACS format, i.e. from 369 /// and maps (e.g. a matching instance) from DIMACS format, i.e. from 370 370 /// DIMACS files having a line starting with 371 371 /// \code … … 393 393 nodes[k] = g.addNode(); 394 394 } 395 395 396 396 while (is >> c) { 397 397 switch (c) { -
lemon/edge_set.h
r717 r1081 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-20 085 * Copyright (C) 2003-2011 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
lemon/euler.h
r695 r1081 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-20 095 * Copyright (C) 2003-2011 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). … … 27 27 /// \ingroup graph_properties 28 28 /// \file 29 /// \brief Euler tour iterators and a function for checking the \e Eulerian 29 /// \brief Euler tour iterators and a function for checking the \e Eulerian 30 30 /// property. 31 31 /// … … 42 42 /// 43 43 ///For example, if the given digraph has an Euler tour (i.e it has only one 44 ///non-trivial component and the in-degree is equal to the out-degree 44 ///non-trivial component and the in-degree is equal to the out-degree 45 45 ///for all nodes), then the following code will put the arcs of \c g 46 46 ///to the vector \c et according to an Euler tour of \c g. … … 139 139 ///and \c Edge types of the graph. 140 140 /// 141 ///For example, if the given graph has an Euler tour (i.e it has only one 141 ///For example, if the given graph has an Euler tour (i.e it has only one 142 142 ///non-trivial component and the degree of each node is even), 143 143 ///the following code will print the arc IDs according to an … … 148 148 /// } 149 149 ///\endcode 150 ///Although this iterator is for undirected graphs, it still returns 150 ///Although this iterator is for undirected graphs, it still returns 151 151 ///arcs in order to indicate the direction of the tour. 152 152 ///(But arcs convert to edges, of course.) … … 234 234 /// Postfix incrementation. 235 235 /// 236 ///\warning This incrementation returns an \c Arc (which converts to 236 ///\warning This incrementation returns an \c Arc (which converts to 237 237 ///an \c Edge), not an \ref EulerIt, as one may expect. 238 238 Arc operator++(int) -
lemon/glpk.h
r900 r1081 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-20 085 * Copyright (C) 2003-2011 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). … … 31 31 class VoidPtr { 32 32 private: 33 void *_ptr; 33 void *_ptr; 34 34 public: 35 35 VoidPtr() : _ptr(0) {} … … 39 39 40 40 template <typename T> 41 VoidPtr& operator=(T* ptr) { 42 _ptr = reinterpret_cast<void*>(ptr); 41 VoidPtr& operator=(T* ptr) { 42 _ptr = reinterpret_cast<void*>(ptr); 43 43 return *this; 44 44 } … … 124 124 } 125 125 }; 126 126 127 127 static FreeEnvHelper freeEnvHelper; 128 128 129 129 protected: 130 130 131 131 int _message_level; 132 132 133 133 public: 134 134 -
lemon/gomory_hu.h
r643 r1081 1 /* -*- C++-*-1 /* -*- mode: C++; indent-tabs-mode: nil; -*- 2 2 * 3 * This file is a part of LEMON, a generic C++ optimization library 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-20 085 * Copyright (C) 2003-2011 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). … … 28 28 29 29 /// \ingroup min_cut 30 /// \file 30 /// \file 31 31 /// \brief Gomory-Hu cut tree in graphs. 32 32 … … 39 39 /// The Gomory-Hu tree is a tree on the node set of a given graph, but it 40 40 /// may contain edges which are not in the original graph. It has the 41 /// property that the minimum capacity edge of the path between two nodes 41 /// property that the minimum capacity edge of the path between two nodes 42 42 /// in this tree has the same weight as the minimum cut in the graph 43 43 /// between these nodes. Moreover the components obtained by removing … … 45 45 /// Therefore once this tree is computed, the minimum cut between any pair 46 46 /// of nodes can easily be obtained. 47 /// 47 /// 48 48 /// The algorithm calculates \e n-1 distinct minimum cuts (currently with 49 49 /// the \ref Preflow algorithm), thus it has \f$O(n^3\sqrt{e})\f$ overall … … 61 61 #ifdef DOXYGEN 62 62 template <typename GR, 63 63 typename CAP> 64 64 #else 65 65 template <typename GR, 66 66 typename CAP = typename GR::template EdgeMap<int> > 67 67 #endif 68 68 class GomoryHu { … … 75 75 /// The value type of capacities 76 76 typedef typename Capacity::Value Value; 77 77 78 78 private: 79 79 … … 90 90 void createStructures() { 91 91 if (!_pred) { 92 92 _pred = new typename Graph::template NodeMap<Node>(_graph); 93 93 } 94 94 if (!_weight) { 95 95 _weight = new typename Graph::template NodeMap<Value>(_graph); 96 96 } 97 97 if (!_order) { 98 98 _order = new typename Graph::template NodeMap<int>(_graph); 99 99 } 100 100 } … … 102 102 void destroyStructures() { 103 103 if (_pred) { 104 104 delete _pred; 105 105 } 106 106 if (_weight) { 107 107 delete _weight; 108 108 } 109 109 if (_order) { 110 111 } 112 } 113 110 delete _order; 111 } 112 } 113 114 114 public: 115 115 … … 119 119 /// \param graph The undirected graph the algorithm runs on. 120 120 /// \param capacity The edge capacity map. 121 GomoryHu(const Graph& graph, const Capacity& capacity) 121 GomoryHu(const Graph& graph, const Capacity& capacity) 122 122 : _graph(graph), _capacity(capacity), 123 _pred(0), _weight(0), _order(0) 123 _pred(0), _weight(0), _order(0) 124 124 { 125 125 checkConcept<concepts::ReadMap<Edge, Value>, Capacity>(); … … 135 135 136 136 private: 137 137 138 138 // Initialize the internal data structures 139 139 void init() { … … 146 146 } 147 147 (*_pred)[_root] = INVALID; 148 (*_weight)[_root] = std::numeric_limits<Value>::max(); 148 (*_weight)[_root] = std::numeric_limits<Value>::max(); 149 149 } 150 150 … … 155 155 156 156 for (NodeIt n(_graph); n != INVALID; ++n) { 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 157 if (n == _root) continue; 158 159 Node pn = (*_pred)[n]; 160 fa.source(n); 161 fa.target(pn); 162 163 fa.runMinCut(); 164 165 (*_weight)[n] = fa.flowValue(); 166 167 for (NodeIt nn(_graph); nn != INVALID; ++nn) { 168 if (nn != n && fa.minCut(nn) && (*_pred)[nn] == pn) { 169 (*_pred)[nn] = n; 170 } 171 } 172 if ((*_pred)[pn] != INVALID && fa.minCut((*_pred)[pn])) { 173 (*_pred)[n] = (*_pred)[pn]; 174 (*_pred)[pn] = n; 175 (*_weight)[n] = (*_weight)[pn]; 176 (*_weight)[pn] = fa.flowValue(); 177 } 178 178 } 179 179 … … 182 182 183 183 for (NodeIt n(_graph); n != INVALID; ++n) { 184 185 186 187 188 189 190 191 192 193 184 std::vector<Node> st; 185 Node nn = n; 186 while ((*_order)[nn] == -1) { 187 st.push_back(nn); 188 nn = (*_pred)[nn]; 189 } 190 while (!st.empty()) { 191 (*_order)[st.back()] = index++; 192 st.pop_back(); 193 } 194 194 } 195 195 } … … 198 198 199 199 ///\name Execution Control 200 200 201 201 ///@{ 202 202 … … 208 208 start(); 209 209 } 210 210 211 211 /// @} 212 212 … … 233 233 /// Gomory-Hu tree. 234 234 /// 235 /// This function returns the weight of the predecessor edge of the 235 /// This function returns the weight of the predecessor edge of the 236 236 /// given node in the Gomory-Hu tree. 237 237 /// If \c node is the root of the tree, the result is undefined. … … 255 255 /// 256 256 /// This function returns the minimum cut value between the nodes 257 /// \c s and \c t. 257 /// \c s and \c t. 258 258 /// It finds the nearest common ancestor of the given nodes in the 259 259 /// Gomory-Hu tree and calculates the minimum weight edge on the … … 264 264 Node sn = s, tn = t; 265 265 Value value = std::numeric_limits<Value>::max(); 266 266 267 267 while (sn != tn) { 268 269 270 271 272 273 274 268 if ((*_order)[sn] < (*_order)[tn]) { 269 if ((*_weight)[tn] <= value) value = (*_weight)[tn]; 270 tn = (*_pred)[tn]; 271 } else { 272 if ((*_weight)[sn] <= value) value = (*_weight)[sn]; 273 sn = (*_pred)[sn]; 274 } 275 275 } 276 276 return value; … … 295 295 /// \pre \ref run() must be called before using this function. 296 296 template <typename CutMap> 297 Value minCutMap(const Node& s, ///< 297 Value minCutMap(const Node& s, ///< 298 298 const Node& t, 299 ///< 299 ///< 300 300 CutMap& cutMap 301 ///< 301 ///< 302 302 ) const { 303 303 Node sn = s, tn = t; … … 305 305 Node rn = INVALID; 306 306 Value value = std::numeric_limits<Value>::max(); 307 307 308 308 while (sn != tn) { 309 310 311 309 if ((*_order)[sn] < (*_order)[tn]) { 310 if ((*_weight)[tn] <= value) { 311 rn = tn; 312 312 s_root = false; 313 314 315 316 317 318 313 value = (*_weight)[tn]; 314 } 315 tn = (*_pred)[tn]; 316 } else { 317 if ((*_weight)[sn] <= value) { 318 rn = sn; 319 319 s_root = true; 320 321 322 323 320 value = (*_weight)[sn]; 321 } 322 sn = (*_pred)[sn]; 323 } 324 324 } 325 325 … … 332 332 std::vector<Node> st; 333 333 for (NodeIt n(_graph); n != INVALID; ++n) { 334 334 st.clear(); 335 335 Node nn = n; 336 337 338 339 340 341 342 343 344 } 345 336 while (!reached[nn]) { 337 st.push_back(nn); 338 nn = (*_pred)[nn]; 339 } 340 while (!st.empty()) { 341 cutMap.set(st.back(), cutMap[nn]); 342 st.pop_back(); 343 } 344 } 345 346 346 return value; 347 347 } … … 352 352 353 353 /// Iterate on the nodes of a minimum cut 354 354 355 355 /// This iterator class lists the nodes of a minimum cut found by 356 356 /// GomoryHu. Before using it, you must allocate a GomoryHu class … … 445 445 } 446 446 }; 447 447 448 448 friend class MinCutEdgeIt; 449 449 450 450 /// Iterate on the edges of a minimum cut 451 451 452 452 /// This iterator class lists the edges of a minimum cut found by 453 453 /// GomoryHu. Before using it, you must allocate a GomoryHu class … … 482 482 } 483 483 } 484 484 485 485 public: 486 486 /// Constructor … … 551 551 } 552 552 /// Postfix incrementation 553 553 554 554 /// Postfix incrementation. 555 555 /// -
lemon/graph_to_eps.h
r1157 r1158 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-20 095 * Copyright (C) 2003-2011 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
lemon/hao_orlin.h
r644 r1081 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-20 095 * Copyright (C) 2003-2011 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). … … 32 32 /// \brief Implementation of the Hao-Orlin algorithm. 33 33 /// 34 /// Implementation of the Hao-Orlin algorithm for finding a minimum cut 34 /// Implementation of the Hao-Orlin algorithm for finding a minimum cut 35 35 /// in a digraph. 36 36 … … 42 42 /// 43 43 /// This class implements the Hao-Orlin algorithm for finding a minimum 44 /// value cut in a directed graph \f$D=(V,A)\f$. 44 /// value cut in a directed graph \f$D=(V,A)\f$. 45 45 /// It takes a fixed node \f$ source \in V \f$ and 46 46 /// consists of two phases: in the first phase it determines a … … 59 59 /// For an undirected graph you can run just the first phase of the 60 60 /// algorithm or you can use the algorithm of Nagamochi and Ibaraki, 61 /// which solves the undirected problem in \f$ O(nm + n^2 \log n) \f$ 61 /// which solves the undirected problem in \f$ O(nm + n^2 \log n) \f$ 62 62 /// time. It is implemented in the NagamochiIbaraki algorithm class. 63 63 /// … … 77 77 class HaoOrlin { 78 78 public: 79 79 80 80 /// The digraph type of the algorithm 81 81 typedef GR Digraph; … … 848 848 /// 849 849 /// This function initializes the internal data structures. It creates 850 /// the maps and some bucket structures for the algorithm. 850 /// the maps and some bucket structures for the algorithm. 851 851 /// The given node is used as the source node for the push-relabel 852 852 /// algorithm. … … 928 928 /// \brief Run the algorithm. 929 929 /// 930 /// This function runs the algorithm. It uses the given \c source node, 930 /// This function runs the algorithm. It uses the given \c source node, 931 931 /// finds a proper \c target node and then calls the \ref init(), 932 932 /// \ref calculateOut() and \ref calculateIn(). … … 942 942 /// The result of the %HaoOrlin algorithm 943 943 /// can be obtained using these functions.\n 944 /// \ref run(), \ref calculateOut() or \ref calculateIn() 944 /// \ref run(), \ref calculateOut() or \ref calculateIn() 945 945 /// should be called before using them. 946 946 … … 951 951 /// This function returns the value of the minimum cut. 952 952 /// 953 /// \pre \ref run(), \ref calculateOut() or \ref calculateIn() 953 /// \pre \ref run(), \ref calculateOut() or \ref calculateIn() 954 954 /// must be called before using this function. 955 955 Value minCutValue() const { … … 970 970 /// \return The value of the minimum cut. 971 971 /// 972 /// \pre \ref run(), \ref calculateOut() or \ref calculateIn() 972 /// \pre \ref run(), \ref calculateOut() or \ref calculateIn() 973 973 /// must be called before using this function. 974 974 template <typename CutMap> -
lemon/lgf_reader.h
r1069 r1081 563 563 friend DigraphReader<TDGR> digraphReader(TDGR& digraph, std::istream& is); 564 564 template <typename TDGR> 565 friend DigraphReader<TDGR> digraphReader(TDGR& digraph, 565 friend DigraphReader<TDGR> digraphReader(TDGR& digraph, 566 566 const std::string& fn); 567 567 template <typename TDGR> … … 1195 1195 1196 1196 }; 1197 1197 1198 1198 /// \ingroup lemon_io 1199 1199 /// … … 1202 1202 /// This function just returns a \ref DigraphReader class. 1203 1203 /// 1204 /// With this function a digraph can be read from an 1204 /// With this function a digraph can be read from an 1205 1205 /// \ref lgf-format "LGF" file or input stream with several maps and 1206 1206 /// attributes. For example, there is network flow problem on a … … 1257 1257 template <typename GR> 1258 1258 class GraphReader; 1259 1259 1260 1260 template <typename TGR> 1261 1261 GraphReader<TGR> graphReader(TGR& graph, std::istream& is = std::cin); … … 1394 1394 friend GraphReader<TGR> graphReader(TGR& graph, std::istream& is); 1395 1395 template <typename TGR> 1396 friend GraphReader<TGR> graphReader(TGR& graph, const std::string& fn); 1396 friend GraphReader<TGR> graphReader(TGR& graph, const std::string& fn); 1397 1397 template <typename TGR> 1398 1398 friend GraphReader<TGR> graphReader(TGR& graph, const char *fn); … … 2078 2078 /// \brief Return a \ref GraphReader class 2079 2079 /// 2080 /// This function just returns a \ref GraphReader class. 2081 /// 2082 /// With this function a graph can be read from an 2080 /// This function just returns a \ref GraphReader class. 2081 /// 2082 /// With this function a graph can be read from an 2083 2083 /// \ref lgf-format "LGF" file or input stream with several maps and 2084 2084 /// attributes. For example, there is weighted matching problem on a -
lemon/lgf_writer.h
r646 r1081 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-20 095 * Copyright (C) 2003-2011 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). … … 352 352 353 353 template <typename TDGR> 354 DigraphWriter<TDGR> digraphWriter(const TDGR& digraph, 354 DigraphWriter<TDGR> digraphWriter(const TDGR& digraph, 355 355 std::ostream& os = std::cout); 356 356 template <typename TDGR> … … 505 505 506 506 template <typename TDGR> 507 friend DigraphWriter<TDGR> digraphWriter(const TDGR& digraph, 507 friend DigraphWriter<TDGR> digraphWriter(const TDGR& digraph, 508 508 std::ostream& os); 509 509 template <typename TDGR> … … 918 918 /// \brief Return a \ref DigraphWriter class 919 919 /// 920 /// This function just returns a \ref DigraphWriter class. 920 /// This function just returns a \ref DigraphWriter class. 921 921 /// 922 922 /// With this function a digraph can be write to a file or output … … 958 958 /// \sa digraphWriter(const TDGR& digraph, std::ostream& os) 959 959 template <typename TDGR> 960 DigraphWriter<TDGR> digraphWriter(const TDGR& digraph, 960 DigraphWriter<TDGR> digraphWriter(const TDGR& digraph, 961 961 const std::string& fn) { 962 962 DigraphWriter<TDGR> tmp(digraph, fn); … … 1102 1102 friend GraphWriter<TGR> graphWriter(const TGR& graph, std::ostream& os); 1103 1103 template <typename TGR> 1104 friend GraphWriter<TGR> graphWriter(const TGR& graph, 1104 friend GraphWriter<TGR> graphWriter(const TGR& graph, 1105 1105 const std::string& fn); 1106 1106 template <typename TGR> 1107 1107 friend GraphWriter<TGR> graphWriter(const TGR& graph, const char *fn); 1108 1108 1109 1109 GraphWriter(GraphWriter& other) 1110 1110 : _os(other._os), local_os(other.local_os), _graph(other._graph), … … 1557 1557 /// \brief Return a \ref GraphWriter class 1558 1558 /// 1559 /// This function just returns a \ref GraphWriter class. 1559 /// This function just returns a \ref GraphWriter class. 1560 1560 /// 1561 1561 /// With this function a graph can be write to a file or output -
lemon/lp.h
r674 r1081 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-20 085 * Copyright (C) 2003-2011 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). … … 85 85 #elif LEMON_HAVE_CLP 86 86 # define DEFAULT_LP CLP 87 typedef ClpLp Lp; 87 typedef ClpLp Lp; 88 88 #endif 89 89 #endif -
lemon/lp_base.cc
r557 r1081 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-20 085 * Copyright (C) 2003-2011 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
lemon/lp_base.h
r1140 r1141 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-20 085 * Copyright (C) 2003-2011 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). … … 83 83 MESSAGE_VERBOSE 84 84 }; 85 85 86 86 87 87 ///The floating point type used by the solver … … 115 115 typedef True LpCol; 116 116 /// Default constructor 117 117 118 118 /// \warning The default constructor sets the Col to an 119 119 /// undefined value. 120 120 Col() {} 121 121 /// Invalid constructor \& conversion. 122 122 123 123 /// This constructor initializes the Col to be invalid. 124 /// \sa Invalid for more details. 124 /// \sa Invalid for more details. 125 125 Col(const Invalid&) : _id(-1) {} 126 126 /// Equality operator … … 157 157 public: 158 158 /// Default constructor 159 159 160 160 /// \warning The default constructor sets the iterator 161 161 /// to an undefined value. 162 162 ColIt() {} 163 163 /// Sets the iterator to the first Col 164 164 165 165 /// Sets the iterator to the first Col. 166 166 /// … … 170 170 } 171 171 /// Invalid constructor \& conversion 172 172 173 173 /// Initialize the iterator to be invalid. 174 174 /// \sa Invalid for more details. 175 175 ColIt(const Invalid&) : Col(INVALID) {} 176 176 /// Next column 177 177 178 178 /// Assign the iterator to the next column. 179 179 /// … … 210 210 typedef True LpRow; 211 211 /// Default constructor 212 212 213 213 /// \warning The default constructor sets the Row to an 214 214 /// undefined value. 215 215 Row() {} 216 216 /// Invalid constructor \& conversion. 217 217 218 218 /// This constructor initializes the Row to be invalid. 219 /// \sa Invalid for more details. 219 /// \sa Invalid for more details. 220 220 Row(const Invalid&) : _id(-1) {} 221 221 /// Equality operator … … 225 225 bool operator==(Row r) const {return _id == r._id;} 226 226 /// Inequality operator 227 227 228 228 /// \sa operator==(Row r) 229 229 /// … … 252 252 public: 253 253 /// Default constructor 254 254 255 255 /// \warning The default constructor sets the iterator 256 256 /// to an undefined value. 257 257 RowIt() {} 258 258 /// Sets the iterator to the first Row 259 259 260 260 /// Sets the iterator to the first Row. 261 261 /// … … 265 265 } 266 266 /// Invalid constructor \& conversion 267 267 268 268 /// Initialize the iterator to be invalid. 269 269 /// \sa Invalid for more details. 270 270 RowIt(const Invalid&) : Row(INVALID) {} 271 271 /// Next row 272 272 273 273 /// Assign the iterator to the next row. 274 274 /// … … 348 348 typedef True SolverExpr; 349 349 /// Default constructor 350 350 351 351 /// Construct an empty expression, the coefficients and 352 352 /// the constant component are initialized to zero. … … 449 449 450 450 ///Iterator over the expression 451 452 ///The iterator iterates over the terms of the expression. 453 /// 451 452 ///The iterator iterates over the terms of the expression. 453 /// 454 454 ///\code 455 455 ///double s=0; … … 465 465 466 466 /// Sets the iterator to the first term 467 467 468 468 /// Sets the iterator to the first term of the expression. 469 469 /// … … 482 482 const Value& operator*() const { return _it->second; } 483 483 /// Next term 484 484 485 485 /// Assign the iterator to the next term. 486 486 /// … … 494 494 495 495 /// Const iterator over the expression 496 497 ///The iterator iterates over the terms of the expression. 498 /// 496 497 ///The iterator iterates over the terms of the expression. 498 /// 499 499 ///\code 500 500 ///double s=0; … … 510 510 511 511 /// Sets the iterator to the first term 512 512 513 513 /// Sets the iterator to the first term of the expression. 514 514 /// … … 525 525 526 526 /// Next term 527 527 528 528 /// Assign the iterator to the next term. 529 529 /// … … 674 674 typedef True SolverExpr; 675 675 /// Default constructor 676 676 677 677 /// Construct an empty expression, the coefficients are 678 678 /// initialized to zero. … … 709 709 } 710 710 /// \brief Removes the coefficients which's absolute value does 711 /// not exceed \c epsilon. 711 /// not exceed \c epsilon. 712 712 void simplify(Value epsilon = 0.0) { 713 713 std::map<int, Value>::iterator it=comps.begin(); … … 758 758 759 759 ///Iterator over the expression 760 761 ///The iterator iterates over the terms of the expression. 762 /// 760 761 ///The iterator iterates over the terms of the expression. 762 /// 763 763 ///\code 764 764 ///double s=0; … … 774 774 775 775 /// Sets the iterator to the first term 776 776 777 777 /// Sets the iterator to the first term of the expression. 778 778 /// … … 792 792 793 793 /// Next term 794 794 795 795 /// Assign the iterator to the next term. 796 796 /// … … 804 804 805 805 ///Iterator over the expression 806 807 ///The iterator iterates over the terms of the expression. 808 /// 806 807 ///The iterator iterates over the terms of the expression. 808 /// 809 809 ///\code 810 810 ///double s=0; … … 820 820 821 821 /// Sets the iterator to the first term 822 822 823 823 /// Sets the iterator to the first term of the expression. 824 824 /// … … 835 835 836 836 /// Next term 837 837 838 838 /// Assign the iterator to the next term. 839 839 /// … … 1804 1804 enum VarStatus { 1805 1805 /// The variable is in the basis 1806 BASIC, 1806 BASIC, 1807 1807 /// The variable is free, but not basic 1808 1808 FREE, 1809 /// The variable has active lower bound 1809 /// The variable has active lower bound 1810 1810 LOWER, 1811 1811 /// The variable has active upper bound … … 1886 1886 } 1887 1887 /// Returns a component of the primal ray 1888 1888 1889 1889 /// The primal ray is solution of the modified primal problem, 1890 1890 /// where we change each finite bound to 0, and we looking for a … … 1920 1920 1921 1921 /// Returns a component of the dual ray 1922 1922 1923 1923 /// The dual ray is solution of the modified primal problem, where 1924 1924 /// we change each finite bound to 0 (i.e. the objective function … … 2062 2062 } 2063 2063 ///The value of the objective function 2064 2064 2065 2065 ///\return 2066 2066 ///- \ref INF or -\ref INF means either infeasibility or unboundedness -
lemon/lp_skeleton.cc
r623 r1081 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-20 085 * Copyright (C) 2003-2011 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
lemon/lp_skeleton.h
r623 r1081 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-20 085 * Copyright (C) 2003-2011 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). … … 24 24 ///\file 25 25 ///\brief Skeleton file to implement LP/MIP solver interfaces 26 /// 26 /// 27 27 ///The classes in this file do nothing, but they can serve as skeletons when 28 28 ///implementing an interface to new solvers. … … 30 30 31 31 ///A skeleton class to implement LP/MIP solver base interface 32 32 33 33 ///This class does nothing, but it can serve as a skeleton when 34 34 ///implementing an interface to new solvers. -
lemon/maps.h
r731 r1081 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-20 095 * Copyright (C) 2003-2011 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). … … 1819 1819 /// 1820 1820 /// IdMap provides a unique and immutable id for each item of the 1821 /// same type (\c Node, \c Arc or \c Edge) in a graph. This id is 1821 /// same type (\c Node, \c Arc or \c Edge) in a graph. This id is 1822 1822 /// - \b unique: different items get different ids, 1823 1823 /// - \b immutable: the id of an item does not change (even if you … … 2274 2274 2275 2275 /// \brief Gives back the item belonging to a \e RangeId 2276 /// 2276 /// 2277 2277 /// Gives back the item belonging to a \e RangeId. 2278 2278 Item operator()(int id) const { … … 2500 2500 /// whenever the digraph changes. 2501 2501 /// 2502 /// \warning Besides \c addNode() and \c addArc(), a digraph structure 2502 /// \warning Besides \c addNode() and \c addArc(), a digraph structure 2503 2503 /// may provide alternative ways to modify the digraph. 2504 2504 /// The correct behavior of InDegMap is not guarantied if these additional … … 2516 2516 2517 2517 public: 2518 2518 2519 2519 /// The graph type of InDegMap 2520 2520 typedef GR Graph; … … 2630 2630 /// whenever the digraph changes. 2631 2631 /// 2632 /// \warning Besides \c addNode() and \c addArc(), a digraph structure 2632 /// \warning Besides \c addNode() and \c addArc(), a digraph structure 2633 2633 /// may provide alternative ways to modify the digraph. 2634 2634 /// The correct behavior of OutDegMap is not guarantied if these additional -
lemon/matching.h
r945 r1081 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-20 095 * Copyright (C) 2003-2011 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). … … 42 42 /// This class implements Edmonds' alternating forest matching algorithm 43 43 /// for finding a maximum cardinality matching in a general undirected graph. 44 /// It can be started from an arbitrary initial matching 44 /// It can be started from an arbitrary initial matching 45 45 /// (the default is the empty one). 46 46 /// … … 70 70 ///\brief Status constants for Gallai-Edmonds decomposition. 71 71 /// 72 ///These constants are used for indicating the Gallai-Edmonds 72 ///These constants are used for indicating the Gallai-Edmonds 73 73 ///decomposition of a graph. The nodes with status \c EVEN (or \c D) 74 74 ///induce a subgraph with factor-critical components, the nodes with 75 75 ///status \c ODD (or \c A) form the canonical barrier, and the nodes 76 ///with status \c MATCHED (or \c C) induce a subgraph having a 76 ///with status \c MATCHED (or \c C) induce a subgraph having a 77 77 ///perfect matching. 78 78 enum Status { … … 513 513 } 514 514 515 /// \brief Start Edmonds' algorithm with a heuristic improvement 515 /// \brief Start Edmonds' algorithm with a heuristic improvement 516 516 /// for dense graphs 517 517 /// … … 535 535 /// \brief Run Edmonds' algorithm 536 536 /// 537 /// This function runs Edmonds' algorithm. An additional heuristic of 538 /// postponing shrinks is used for relatively dense graphs 537 /// This function runs Edmonds' algorithm. An additional heuristic of 538 /// postponing shrinks is used for relatively dense graphs 539 539 /// (for which <tt>m>=2*n</tt> holds). 540 540 void run() { … … 557 557 /// \brief Return the size (cardinality) of the matching. 558 558 /// 559 /// This function returns the size (cardinality) of the current matching. 559 /// This function returns the size (cardinality) of the current matching. 560 560 /// After run() it returns the size of the maximum matching in the graph. 561 561 int matchingSize() const { … … 571 571 /// \brief Return \c true if the given edge is in the matching. 572 572 /// 573 /// This function returns \c true if the given edge is in the current 573 /// This function returns \c true if the given edge is in the current 574 574 /// matching. 575 575 bool matching(const Edge& edge) const { … … 580 580 /// 581 581 /// This function returns the matching arc (or edge) incident to the 582 /// given node in the current matching or \c INVALID if the node is 582 /// given node in the current matching or \c INVALID if the node is 583 583 /// not covered by the matching. 584 584 Arc matching(const Node& n) const { … … 596 596 /// \brief Return the mate of the given node. 597 597 /// 598 /// This function returns the mate of the given node in the current 598 /// This function returns the mate of the given node in the current 599 599 /// matching or \c INVALID if the node is not covered by the matching. 600 600 Node mate(const Node& n) const { … … 606 606 607 607 /// \name Dual Solution 608 /// Functions to get the dual solution, i.e. the Gallai-Edmonds 608 /// Functions to get the dual solution, i.e. the Gallai-Edmonds 609 609 /// decomposition. 610 610 … … 649 649 /// \f$O(nm\log n)\f$ time complexity. 650 650 /// 651 /// The maximum weighted matching problem is to find a subset of the 652 /// edges in an undirected graph with maximum overall weight for which 651 /// The maximum weighted matching problem is to find a subset of the 652 /// edges in an undirected graph with maximum overall weight for which 653 653 /// each node has at most one incident edge. 654 654 /// It can be formulated with the following linear program. … … 674 674 \frac{\vert B \vert - 1}{2}z_B\f] */ 675 675 /// 676 /// The algorithm can be executed with the run() function. 676 /// The algorithm can be executed with the run() function. 677 677 /// After it the matching (the primal solution) and the dual solution 678 /// can be obtained using the query functions and the 679 /// \ref MaxWeightedMatching::BlossomIt "BlossomIt" nested class, 680 /// which is able to iterate on the nodes of a blossom. 678 /// can be obtained using the query functions and the 679 /// \ref MaxWeightedMatching::BlossomIt "BlossomIt" nested class, 680 /// which is able to iterate on the nodes of a blossom. 681 681 /// If the value type is integer, then the dual solution is multiplied 682 682 /// by \ref MaxWeightedMatching::dualScale "4". 683 683 /// 684 684 /// \tparam GR The undirected graph type the algorithm runs on. 685 /// \tparam WM The type edge weight map. The default type is 685 /// \tparam WM The type edge weight map. The default type is 686 686 /// \ref concepts::Graph::EdgeMap "GR::EdgeMap<int>". 687 687 #ifdef DOXYGEN … … 1721 1721 (*_delta4_index)[i] = _delta4->PRE_HEAP; 1722 1722 } 1723 1723 1724 1724 _delta1->clear(); 1725 1725 _delta2->clear(); … … 1869 1869 1870 1870 /// \name Primal Solution 1871 /// Functions to get the primal solution, i.e. the maximum weighted 1871 /// Functions to get the primal solution, i.e. the maximum weighted 1872 1872 /// matching.\n 1873 1873 /// Either \ref run() or \ref start() function should be called before … … 1908 1908 /// \brief Return \c true if the given edge is in the matching. 1909 1909 /// 1910 /// This function returns \c true if the given edge is in the found 1910 /// This function returns \c true if the given edge is in the found 1911 1911 /// matching. 1912 1912 /// … … 1919 1919 /// 1920 1920 /// This function returns the matching arc (or edge) incident to the 1921 /// given node in the found matching or \c INVALID if the node is 1921 /// given node in the found matching or \c INVALID if the node is 1922 1922 /// not covered by the matching. 1923 1923 /// … … 1937 1937 /// \brief Return the mate of the given node. 1938 1938 /// 1939 /// This function returns the mate of the given node in the found 1939 /// This function returns the mate of the given node in the found 1940 1940 /// matching or \c INVALID if the node is not covered by the matching. 1941 1941 /// … … 1957 1957 /// \brief Return the value of the dual solution. 1958 1958 /// 1959 /// This function returns the value of the dual solution. 1960 /// It should be equal to the primal value scaled by \ref dualScale 1959 /// This function returns the value of the dual solution. 1960 /// It should be equal to the primal value scaled by \ref dualScale 1961 1961 /// "dual scale". 1962 1962 /// … … 2013 2013 /// \brief Iterator for obtaining the nodes of a blossom. 2014 2014 /// 2015 /// This class provides an iterator for obtaining the nodes of the 2015 /// This class provides an iterator for obtaining the nodes of the 2016 2016 /// given blossom. It lists a subset of the nodes. 2017 /// Before using this iterator, you must allocate a 2017 /// Before using this iterator, you must allocate a 2018 2018 /// MaxWeightedMatching class and execute it. 2019 2019 class BlossomIt { … … 2024 2024 /// Constructor to get the nodes of the given variable. 2025 2025 /// 2026 /// \pre Either \ref MaxWeightedMatching::run() "algorithm.run()" or 2027 /// \ref MaxWeightedMatching::start() "algorithm.start()" must be 2026 /// \pre Either \ref MaxWeightedMatching::run() "algorithm.run()" or 2027 /// \ref MaxWeightedMatching::start() "algorithm.start()" must be 2028 2028 /// called before initializing this iterator. 2029 2029 BlossomIt(const MaxWeightedMatching& algorithm, int variable) … … 2078 2078 /// \f$O(nm\log n)\f$ time complexity. 2079 2079 /// 2080 /// The maximum weighted perfect matching problem is to find a subset of 2081 /// the edges in an undirected graph with maximum overall weight for which 2080 /// The maximum weighted perfect matching problem is to find a subset of 2081 /// the edges in an undirected graph with maximum overall weight for which 2082 2082 /// each node has exactly one incident edge. 2083 2083 /// It can be formulated with the following linear program. … … 2102 2102 \frac{\vert B \vert - 1}{2}z_B\f] */ 2103 2103 /// 2104 /// The algorithm can be executed with the run() function. 2104 /// The algorithm can be executed with the run() function. 2105 2105 /// After it the matching (the primal solution) and the dual solution 2106 /// can be obtained using the query functions and the 2107 /// \ref MaxWeightedPerfectMatching::BlossomIt "BlossomIt" nested class, 2108 /// which is able to iterate on the nodes of a blossom. 2106 /// can be obtained using the query functions and the 2107 /// \ref MaxWeightedPerfectMatching::BlossomIt "BlossomIt" nested class, 2108 /// which is able to iterate on the nodes of a blossom. 2109 2109 /// If the value type is integer, then the dual solution is multiplied 2110 2110 /// by \ref MaxWeightedMatching::dualScale "4". 2111 2111 /// 2112 2112 /// \tparam GR The undirected graph type the algorithm runs on. 2113 /// \tparam WM The type edge weight map. The default type is 2113 /// \tparam WM The type edge weight map. The default type is 2114 2114 /// \ref concepts::Graph::EdgeMap "GR::EdgeMap<int>". 2115 2115 #ifdef DOXYGEN … … 3116 3116 3117 3117 /// \name Primal Solution 3118 /// Functions to get the primal solution, i.e. the maximum weighted 3118 /// Functions to get the primal solution, i.e. the maximum weighted 3119 3119 /// perfect matching.\n 3120 3120 /// Either \ref run() or \ref start() function should be called before … … 3140 3140 /// \brief Return \c true if the given edge is in the matching. 3141 3141 /// 3142 /// This function returns \c true if the given edge is in the found 3142 /// This function returns \c true if the given edge is in the found 3143 3143 /// matching. 3144 3144 /// … … 3151 3151 /// 3152 3152 /// This function returns the matching arc (or edge) incident to the 3153 /// given node in the found matching or \c INVALID if the node is 3153 /// given node in the found matching or \c INVALID if the node is 3154 3154 /// not covered by the matching. 3155 3155 /// … … 3169 3169 /// \brief Return the mate of the given node. 3170 3170 /// 3171 /// This function returns the mate of the given node in the found 3171 /// This function returns the mate of the given node in the found 3172 3172 /// matching or \c INVALID if the node is not covered by the matching. 3173 3173 /// … … 3188 3188 /// \brief Return the value of the dual solution. 3189 3189 /// 3190 /// This function returns the value of the dual solution. 3191 /// It should be equal to the primal value scaled by \ref dualScale 3190 /// This function returns the value of the dual solution. 3191 /// It should be equal to the primal value scaled by \ref dualScale 3192 3192 /// "dual scale". 3193 3193 /// … … 3244 3244 /// \brief Iterator for obtaining the nodes of a blossom. 3245 3245 /// 3246 /// This class provides an iterator for obtaining the nodes of the 3246 /// This class provides an iterator for obtaining the nodes of the 3247 3247 /// given blossom. It lists a subset of the nodes. 3248 /// Before using this iterator, you must allocate a 3248 /// Before using this iterator, you must allocate a 3249 3249 /// MaxWeightedPerfectMatching class and execute it. 3250 3250 class BlossomIt { … … 3255 3255 /// Constructor to get the nodes of the given variable. 3256 3256 /// 3257 /// \pre Either \ref MaxWeightedPerfectMatching::run() "algorithm.run()" 3258 /// or \ref MaxWeightedPerfectMatching::start() "algorithm.start()" 3257 /// \pre Either \ref MaxWeightedPerfectMatching::run() "algorithm.run()" 3258 /// or \ref MaxWeightedPerfectMatching::start() "algorithm.start()" 3259 3259 /// must be called before initializing this iterator. 3260 3260 BlossomIt(const MaxWeightedPerfectMatching& algorithm, int variable) -
lemon/math.h
r558 r1081 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-20 095 * Copyright (C) 2003-2011 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). … … 57 57 58 58 ///Check whether the parameter is NaN or not 59 59 60 60 ///This function checks whether the parameter is NaN or not. 61 61 ///Is should be equivalent with std::isnan(), but it is not -
lemon/min_cost_arborescence.h
r672 r1081 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-20 085 * Copyright (C) 2003-2011 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). … … 128 128 public: 129 129 130 /// \brief The \ref MinCostArborescenceDefaultTraits "traits class" 131 /// of the algorithm. 130 /// \brief The \ref MinCostArborescenceDefaultTraits "traits class" 131 /// of the algorithm. 132 132 typedef TR Traits; 133 133 /// The type of the underlying digraph. … … 436 436 /// \ref named-templ-param "Named parameter" for setting 437 437 /// \c PredMap type. 438 /// It must meet the \ref concepts::WriteMap "WriteMap" concept, 438 /// It must meet the \ref concepts::WriteMap "WriteMap" concept, 439 439 /// and its value type must be the \c Arc type of the digraph. 440 440 template <class T> -
lemon/network_simplex.h
r976 r1081 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-20 095 * Copyright (C) 2003-2011 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). … … 96 96 UNBOUNDED 97 97 }; 98 98 99 99 /// \brief Constants for selecting the type of the supply constraints. 100 100 /// … … 114 114 LEQ 115 115 }; 116 116 117 117 /// \brief Constants for selecting the pivot rule. 118 118 /// … … 157 157 ALTERING_LIST 158 158 }; 159 159 160 160 private: 161 161 … … 224 224 225 225 public: 226 226 227 227 /// \brief Constant for infinite upper bounds (capacities). 228 228 /// … … 645 645 LEMON_ASSERT(std::numeric_limits<Cost>::is_signed, 646 646 "The cost type of NetworkSimplex must be signed"); 647 647 648 648 // Resize vectors 649 649 _node_num = countNodes(_graph); … … 685 685 if ((i += k) >= _arc_num) i = (i % k) + 1; 686 686 } 687 687 688 688 // Initialize maps 689 689 for (int i = 0; i != _node_num; ++i) { … … 810 810 return *this; 811 811 } 812 812 813 813 /// \brief Set the type of the supply constraints. 814 814 /// … … 836 836 /// This function runs the algorithm. 837 837 /// The paramters can be specified using functions \ref lowerMap(), 838 /// \ref upperMap(), \ref costMap(), \ref supplyMap(), \ref stSupply(), 838 /// \ref upperMap(), \ref costMap(), \ref supplyMap(), \ref stSupply(), 839 839 /// \ref supplyType(). 840 840 /// For example, … … 1055 1055 _state[i] = STATE_LOWER; 1056 1056 } 1057 1057 1058 1058 // Set data for the artificial root node 1059 1059 _root = _node_num; … … 1229 1229 for (int u = second; u != join; u = _parent[u]) { 1230 1230 e = _pred[u]; 1231 d = _forward[u] ? 1231 d = _forward[u] ? 1232 1232 (_cap[e] == INF ? INF : _cap[e] - _flow[e]) : _flow[e]; 1233 1233 if (d <= delta) { … … 1436 1436 } 1437 1437 } 1438 1438 1439 1439 // Check feasibility 1440 1440 for (int e = _search_arc_num; e != _all_arc_num; ++e) { … … 1453 1453 } 1454 1454 } 1455 1455 1456 1456 // Shift potentials to meet the requirements of the GEQ/LEQ type 1457 1457 // optimality conditions -
lemon/path.h
r1144 r1145 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-20 095 * Copyright (C) 2003-2011 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). … … 1019 1019 }; 1020 1020 1021 1021 1022 1022 template <typename From, typename To, 1023 1023 bool revEnable = RevPathTagIndicator<From>::value> … … 1025 1025 static void copy(const From& from, To& to) { 1026 1026 PathCopySelectorForward<From, To>::copy(from, to); 1027 } 1027 } 1028 1028 }; 1029 1029 … … 1032 1032 static void copy(const From& from, To& to) { 1033 1033 PathCopySelectorBackward<From, To>::copy(from, to); 1034 } 1034 } 1035 1035 }; 1036 1036 -
lemon/preflow.h
r1027 r1081 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-20 095 * Copyright (C) 2003-2011 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). … … 537 537 } 538 538 } 539 for (NodeIt n(_graph); n != INVALID; ++n) 539 for (NodeIt n(_graph); n != INVALID; ++n) 540 540 if(n!=_source && n!=_target && _tolerance.positive((*_excess)[n])) 541 541 _level->activate(n); 542 542 543 543 return true; 544 544 } … … 568 568 level = _level->highestActiveLevel(); 569 569 --num; 570 570 571 571 Value excess = (*_excess)[n]; 572 572 int new_level = _level->maxLevel(); -
lemon/soplex.cc
r623 r1081 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-20 085 * Copyright (C) 2003-2011 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). … … 275 275 276 276 _clear_temporals(); 277 277 278 278 _applyMessageLevel(); 279 279 -
lemon/soplex.h
r623 r1081 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-20 085 * Copyright (C) 2003-2011 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
lemon/suurballe.h
r925 r1081 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-20 095 * Copyright (C) 2003-2011 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). … … 46 46 /// Note that this problem is a special case of the \ref min_cost_flow 47 47 /// "minimum cost flow problem". This implementation is actually an 48 /// efficient specialized version of the \ref CapacityScaling49 /// "Successive Shortest Path"algorithm directly for this problem.48 /// efficient specialized version of the Successive Shortest Path 49 /// algorithm directly for this problem. 50 50 /// Therefore this class provides query functions for flow values and 51 51 /// node potentials (the dual solution) just like the minimum cost flow -
lemon/unionfind.h
r945 r1081 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-20 095 * Copyright (C) 2003-2011 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
test/Makefile.am
r1102 r1109 69 69 test_graph_test_SOURCES = test/graph_test.cc 70 70 test_graph_utils_test_SOURCES = test/graph_utils_test.cc 71 test_hao_orlin_test_SOURCES = test/hao_orlin_test.cc 71 72 test_heap_test_SOURCES = test/heap_test.cc 72 73 test_kruskal_test_SOURCES = test/kruskal_test.cc 73 test_hao_orlin_test_SOURCES = test/hao_orlin_test.cc74 74 test_lgf_test_SOURCES = test/lgf_test.cc 75 75 test_lp_test_SOURCES = test/lp_test.cc -
test/adaptors_test.cc
r1157 r1158 1381 1381 1382 1382 // Apply several adaptors on the grid graph 1383 typedef SplitNodes< ReverseDigraph< const Orienter< 1384 const GridGraph, GridGraph::EdgeMap<bool> > > > 1385 RevSplitGridGraph; 1383 typedef Orienter<const GridGraph, GridGraph::EdgeMap<bool> > 1384 OrientedGridGraph; 1385 typedef ReverseDigraph<const OrientedGridGraph> RevOrientedGridGraph; 1386 typedef SplitNodes<RevOrientedGridGraph> RevSplitGridGraph; 1386 1387 typedef ReverseDigraph<const RevSplitGridGraph> SplitGridGraph; 1387 1388 typedef Undirector<const SplitGridGraph> USplitGridGraph; … … 1392 1393 checkConcept<concepts::Graph, UUSplitGridGraph>(); 1393 1394 1395 OrientedGridGraph ori_adaptor = orienter(graph, dir_map); 1396 RevOrientedGridGraph rev_ori_adaptor = reverseDigraph(ori_adaptor); 1394 1397 RevSplitGridGraph rev_adaptor = 1395 splitNodes(rev erseDigraph(orienter(graph, dir_map)));1398 splitNodes(rev_ori_adaptor); 1396 1399 SplitGridGraph adaptor = reverseDigraph(rev_adaptor); 1397 1400 USplitGridGraph uadaptor = undirector(adaptor); -
test/bfs_test.cc
r632 r1081 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-20 095 * Copyright (C) 2003-2011 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). … … 84 84 b = const_bfs_test.emptyQueue(); 85 85 i = const_bfs_test.queueSize(); 86 86 87 87 bfs_test.start(); 88 88 bfs_test.start(t); … … 105 105 ::SetProcessedMap<concepts::WriteMap<Node,bool> > 106 106 ::Create bfs_test(G); 107 107 108 108 concepts::ReadWriteMap<Node,Arc> pred_map; 109 109 concepts::ReadWriteMap<Node,int> dist_map; 110 110 concepts::ReadWriteMap<Node,bool> reached_map; 111 111 concepts::WriteMap<Node,bool> processed_map; 112 112 113 113 bfs_test 114 114 .predMap(pred_map) … … 120 120 bfs_test.run(s,t); 121 121 bfs_test.run(); 122 122 123 123 bfs_test.init(); 124 124 bfs_test.addSource(s); … … 129 129 b = bfs_test.emptyQueue(); 130 130 i = bfs_test.queueSize(); 131 131 132 132 bfs_test.start(); 133 133 bfs_test.start(t); -
test/circulation_test.cc
r658 r1081 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-20 095 * Copyright (C) 2003-2011 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). … … 82 82 CirculationType circ_test(g, lcap, ucap, supply); 83 83 const CirculationType& const_circ_test = circ_test; 84 84 85 85 circ_test 86 86 .lowerMap(lcap) … … 98 98 b = const_circ_test.barrier(n); 99 99 const_circ_test.barrierMap(bar); 100 100 101 101 ignore_unused_variable_warning(fm); 102 102 } -
test/connectivity_test.cc
r1157 r1158 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-20 095 * Copyright (C) 2003-2011 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). … … 30 30 typedef ListDigraph Digraph; 31 31 typedef Undirector<Digraph> Graph; 32 33 { 34 Digraph d; 35 Digraph::NodeMap<int> order(d); 36 Graph g(d); 37 32 33 { 34 Digraph d; 35 Digraph::NodeMap<int> order(d); 36 Graph g(d); 37 38 38 check(stronglyConnected(d), "The empty digraph is strongly connected"); 39 39 check(countStronglyConnectedComponents(d) == 0, … … 49 49 check(countBiEdgeConnectedComponents(g) == 0, 50 50 "The empty graph has 0 bi-edge-connected component"); 51 51 52 52 check(dag(d), "The empty digraph is DAG."); 53 53 check(checkedTopologicalSort(d, order), "The empty digraph is DAG."); … … 84 84 check(countBiEdgeConnectedComponents(g) == 1, 85 85 "This graph has 1 bi-edge-connected component"); 86 86 87 87 check(dag(d), "This digraph is DAG."); 88 88 check(checkedTopologicalSort(d, order), "This digraph is DAG."); … … 103 103 Digraph::NodeMap<int> order(d); 104 104 Graph g(d); 105 105 106 106 Digraph::Node n1 = d.addNode(); 107 107 Digraph::Node n2 = d.addNode(); … … 110 110 Digraph::Node n5 = d.addNode(); 111 111 Digraph::Node n6 = d.addNode(); 112 112 113 113 d.addArc(n1, n3); 114 114 d.addArc(n3, n2); … … 138 138 check(!parallelFree(g), "This graph is not parallel-free."); 139 139 check(!simpleGraph(g), "This graph is not simple."); 140 140 141 141 d.addArc(n3, n3); 142 142 143 143 check(!loopFree(d), "This digraph is not loop-free."); 144 144 check(!loopFree(g), "This graph is not loop-free."); 145 145 check(!simpleGraph(d), "This digraph is not simple."); 146 146 147 147 d.addArc(n3, n2); 148 148 149 149 check(!parallelFree(d), "This digraph is not parallel-free."); 150 150 } 151 151 152 152 { 153 153 Digraph d; 154 154 Digraph::ArcMap<bool> cutarcs(d, false); 155 155 Graph g(d); 156 156 157 157 Digraph::Node n1 = d.addNode(); 158 158 Digraph::Node n2 = d.addNode(); … … 174 174 d.addArc(n6, n7); 175 175 d.addArc(n7, n6); 176 176 177 177 check(!stronglyConnected(d), "This digraph is not strongly connected"); 178 178 check(countStronglyConnectedComponents(d) == 3, … … 237 237 Digraph d; 238 238 Digraph::NodeMap<int> order(d); 239 239 240 240 Digraph::Node belt = d.addNode(); 241 241 Digraph::Node trousers = d.addNode(); … … 258 258 d.addArc(shirt, necktie); 259 259 d.addArc(necktie, coat); 260 260 261 261 check(dag(d), "This digraph is DAG."); 262 262 topologicalSort(d, order); … … 270 270 ListGraph g; 271 271 ListGraph::NodeMap<bool> map(g); 272 272 273 273 ListGraph::Node n1 = g.addNode(); 274 274 ListGraph::Node n2 = g.addNode(); … … 286 286 g.addEdge(n4, n7); 287 287 g.addEdge(n5, n7); 288 288 289 289 check(bipartite(g), "This graph is bipartite"); 290 290 check(bipartitePartitions(g, map), "This graph is bipartite"); 291 291 292 292 check(map[n1] == map[n2] && map[n1] == map[n6] && map[n1] == map[n7], 293 293 "Wrong bipartitePartitions()"); -
test/dfs_test.cc
r1009 r1081 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-20 095 * Copyright (C) 2003-2011 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). … … 87 87 b = const_dfs_test.emptyQueue(); 88 88 i = const_dfs_test.queueSize(); 89 89 90 90 dfs_test.start(); 91 91 dfs_test.start(t); … … 113 113 concepts::ReadWriteMap<Node,bool> reached_map; 114 114 concepts::WriteMap<Node,bool> processed_map; 115 115 116 116 dfs_test 117 117 .predMap(pred_map) … … 130 130 b = dfs_test.emptyQueue(); 131 131 i = dfs_test.queueSize(); 132 132 133 133 dfs_test.start(); 134 134 dfs_test.start(t); … … 220 220 check(dfs.run(s1,t1) && dfs.reached(t1),"Node 3 is reachable from Node 6."); 221 221 } 222 222 223 223 { 224 224 NullMap<Node,Arc> myPredMap; -
test/dijkstra_test.cc
r632 r1081 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-20 095 * Copyright (C) 2003-2011 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). … … 86 86 b = const_dijkstra_test.emptyQueue(); 87 87 i = const_dijkstra_test.queueSize(); 88 88 89 89 dijkstra_test.start(); 90 90 dijkstra_test.start(t); … … 110 110 ::SetHeap<BinHeap<VType, concepts::ReadWriteMap<Node,int> > > 111 111 ::SetStandardHeap<BinHeap<VType, concepts::ReadWriteMap<Node,int> > > 112 ::SetHeap<BinHeap<VType, concepts::ReadWriteMap<Node,int> >, 112 ::SetHeap<BinHeap<VType, concepts::ReadWriteMap<Node,int> >, 113 113 concepts::ReadWriteMap<Node,int> > 114 114 ::Create dijkstra_test(G,length); … … 120 120 concepts::ReadWriteMap<Node,int> heap_cross_ref; 121 121 BinHeap<VType, concepts::ReadWriteMap<Node,int> > heap(heap_cross_ref); 122 122 123 123 dijkstra_test 124 124 .lengthMap(length_map) … … 137 137 b = dijkstra_test.emptyQueue(); 138 138 i = dijkstra_test.queueSize(); 139 139 140 140 dijkstra_test.start(); 141 141 dijkstra_test.start(t); -
test/edge_set_test.cc
r1157 r1158 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-20 085 * Copyright (C) 2003-2011 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
test/euler_test.cc
r1157 r1158 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-20 095 * Copyright (C) 2003-2011 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). … … 86 86 typedef ListDigraph Digraph; 87 87 typedef Undirector<Digraph> Graph; 88 89 { 90 Digraph d; 91 Graph g(d); 92 88 89 { 90 Digraph d; 91 Graph g(d); 92 93 93 checkDiEulerIt(d); 94 94 checkDiEulerIt(g); … … 130 130 Digraph::Node n2 = d.addNode(); 131 131 Digraph::Node n3 = d.addNode(); 132 132 133 133 d.addArc(n1, n2); 134 134 d.addArc(n2, n1); … … 155 155 Digraph::Node n5 = d.addNode(); 156 156 Digraph::Node n6 = d.addNode(); 157 157 158 158 d.addArc(n1, n2); 159 159 d.addArc(n2, n4); … … 214 214 Digraph::Node n2 = d.addNode(); 215 215 Digraph::Node n3 = d.addNode(); 216 216 217 217 d.addArc(n1, n2); 218 218 d.addArc(n2, n3); -
test/gomory_hu_test.cc
r643 r1081 1 /* -*- mode: C++; indent-tabs-mode: nil; -*- 2 * 3 * This file is a part of LEMON, a generic C++ optimization library. 4 * 5 * Copyright (C) 2003-2011 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). 8 * 9 * Permission to use, modify and distribute this software is granted 10 * provided that this copyright notice appears in all copies. For 11 * precise terms see the accompanying LICENSE file. 12 * 13 * This software is provided "AS IS" with no warranty of any kind, 14 * express or implied, and with no claim as to its suitability for any 15 * purpose. 16 * 17 */ 18 1 19 #include <iostream> 2 20 … … 34 52 "source 0\n" 35 53 "target 3\n"; 36 54 37 55 void checkGomoryHuCompile() 38 56 { … … 70 88 71 89 int cutValue(const Graph& graph, const BoolNodeMap& cut, 72 90 const IntEdgeMap& capacity) { 73 91 74 92 int sum = 0; … … 108 126 int sum=0; 109 127 for(GomoryHu<Graph>::MinCutEdgeIt a(ght, u, v);a!=INVALID;++a) 110 sum+=capacity[a]; 128 sum+=capacity[a]; 111 129 check(sum == ght.minCutValue(u, v), "Problem with MinCutEdgeIt"); 112 130 … … 119 137 } 120 138 } 121 139 122 140 return 0; 123 141 } -
test/graph_copy_test.cc
r984 r1081 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-20 095 * Copyright (C) 2003-2011 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). … … 71 71 nodeCrossRef(ncr).arcCrossRef(ecr). 72 72 node(fn, tn).arc(fa, ta).run(); 73 73 74 74 check(countNodes(from) == countNodes(to), "Wrong copy."); 75 75 check(countArcs(from) == countArcs(to), "Wrong copy."); … … 99 99 // Test repeated copy 100 100 digraphCopy(from, to).run(); 101 101 102 102 check(countNodes(from) == countNodes(to), "Wrong copy."); 103 103 check(countArcs(from) == countArcs(to), "Wrong copy."); … … 201 201 // Test repeated copy 202 202 graphCopy(from, to).run(); 203 203 204 204 check(countNodes(from) == countNodes(to), "Wrong copy."); 205 205 check(countEdges(from) == countEdges(to), "Wrong copy."); -
test/hao_orlin_test.cc
r644 r1081 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-20 095 * Copyright (C) 2003-2011 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). … … 84 84 85 85 template <typename Graph, typename CapMap, typename CutMap> 86 typename CapMap::Value 86 typename CapMap::Value 87 87 cutValue(const Graph& graph, const CapMap& cap, const CutMap& cut) 88 88 { … … 111 111 ho.run(); 112 112 ho.minCutMap(cut); 113 113 114 114 check(ho.minCutValue() == 1, "Wrong cut value"); 115 115 check(ho.minCutValue() == cutValue(graph, cap1, cut), "Wrong cut value"); … … 127 127 ho.run(); 128 128 ho.minCutMap(cut); 129 129 130 130 check(ho.minCutValue() == 1, "Wrong cut value"); 131 131 check(ho.minCutValue() == cutValue(graph, cap3, cut), "Wrong cut value"); 132 132 } 133 133 134 134 typedef Undirector<SmartDigraph> UGraph; 135 135 UGraph ugraph(graph); 136 136 137 137 { 138 138 HaoOrlin<UGraph, SmartDigraph::ArcMap<int> > ho(ugraph, cap1); 139 139 ho.run(); 140 140 ho.minCutMap(cut); 141 141 142 142 check(ho.minCutValue() == 2, "Wrong cut value"); 143 143 check(ho.minCutValue() == cutValue(ugraph, cap1, cut), "Wrong cut value"); … … 147 147 ho.run(); 148 148 ho.minCutMap(cut); 149 149 150 150 check(ho.minCutValue() == 5, "Wrong cut value"); 151 151 check(ho.minCutValue() == cutValue(ugraph, cap2, cut), "Wrong cut value"); … … 155 155 ho.run(); 156 156 ho.minCutMap(cut); 157 157 158 158 check(ho.minCutValue() == 5, "Wrong cut value"); 159 159 check(ho.minCutValue() == cutValue(ugraph, cap3, cut), "Wrong cut value"); -
test/heap_test.cc
r728 r1081 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-20 095 * Copyright (C) 2003-2011 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
test/lgf_test.cc
r1087 r1097 64 64 65 65 66 int main() 66 int main() 67 67 { 68 68 { 69 ListDigraph d; 69 ListDigraph d; 70 70 ListDigraph::Node s,t; 71 71 ListDigraph::ArcMap<int> label(d); … … 94 94 95 95 { 96 ListDigraph d; 96 ListDigraph d; 97 97 std::istringstream input(test_lgf_nomap); 98 98 digraphReader(d, input). … … 111 111 112 112 { 113 ListDigraph d; 113 ListDigraph d; 114 114 std::istringstream input(test_lgf_bad1); 115 115 bool ok=false; … … 118 118 run(); 119 119 } 120 catch (FormatError&) 120 catch (FormatError&) 121 121 { 122 122 ok = true; … … 140 140 141 141 { 142 ListDigraph d; 142 ListDigraph d; 143 143 std::istringstream input(test_lgf_bad2); 144 144 bool ok=false; -
test/lp_test.cc
r1140 r1141 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-20 095 * Copyright (C) 2003-2011 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
test/maps_test.cc
r1157 r1158 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-20 095 * Copyright (C) 2003-2011 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). … … 71 71 checkConcept<ReadWriteMap<A,B>, ReadWriteMap<A,B> >(); 72 72 checkConcept<ReadWriteMap<A,C>, ReadWriteMap<A,C> >(); 73 checkConcept<ReferenceMap<A,B,B&,const B&>, ReferenceMap<A,B,B&,const B&> >(); 74 checkConcept<ReferenceMap<A,C,C&,const C&>, ReferenceMap<A,C,C&,const C&> >(); 73 checkConcept<ReferenceMap<A,B,B&,const B&>, 74 ReferenceMap<A,B,B&,const B&> >(); 75 checkConcept<ReferenceMap<A,C,C&,const C&>, 76 ReferenceMap<A,C,C&,const C&> >(); 75 77 76 78 // NullMap … … 369 371 check(v1[i++] == *it, "Something is wrong with LoggerBoolMap"); 370 372 } 371 373 372 374 // CrossRefMap 373 375 { … … 377 379 checkConcept<ReadWriteMap<Node, int>, 378 380 CrossRefMap<Graph, Node, int> >(); 379 381 380 382 Graph gr; 381 383 typedef CrossRefMap<Graph, Node, char> CRMap; 382 384 typedef CRMap::ValueIterator ValueIt; 383 385 CRMap map(gr); 384 386 385 387 Node n0 = gr.addNode(); 386 388 Node n1 = gr.addNode(); 387 389 Node n2 = gr.addNode(); 388 390 389 391 map.set(n0, 'A'); 390 392 map.set(n1, 'B'); -
test/matching_test.cc
r641 r1081 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-20 095 * Copyright (C) 2003-2011 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). … … 135 135 mat_test.startDense(); 136 136 mat_test.run(); 137 137 138 138 const_mat_test.matchingSize(); 139 139 const_mat_test.matching(e); … … 144 144 const_mat_test.mate(n); 145 145 146 MaxMatching<Graph>::Status stat = 146 MaxMatching<Graph>::Status stat = 147 147 const_mat_test.status(n); 148 148 const MaxMatching<Graph>::StatusMap& smap = … … 171 171 mat_test.start(); 172 172 mat_test.run(); 173 173 174 174 const_mat_test.matchingWeight(); 175 175 const_mat_test.matchingSize(); … … 180 180 e = mmap[n]; 181 181 const_mat_test.mate(n); 182 182 183 183 int k = 0; 184 184 const_mat_test.dualValue(); … … 208 208 mat_test.start(); 209 209 mat_test.run(); 210 210 211 211 const_mat_test.matchingWeight(); 212 212 const_mat_test.matching(e); … … 216 216 e = mmap[n]; 217 217 const_mat_test.mate(n); 218 218 219 219 int k = 0; 220 220 const_mat_test.dualValue(); -
test/min_cost_arborescence_test.cc
r672 r1081 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-20 085 * Copyright (C) 2003-2011 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). … … 111 111 b = const_mcarb_test.emptyQueue(); 112 112 i = const_mcarb_test.queueSize(); 113 113 114 114 c = const_mcarb_test.arborescenceCost(); 115 115 b = const_mcarb_test.arborescence(e); … … 121 121 b = const_mcarb_test.reached(n); 122 122 b = const_mcarb_test.processed(n); 123 123 124 124 i = const_mcarb_test.dualNum(); 125 125 c = const_mcarb_test.dualValue(); 126 126 i = const_mcarb_test.dualSize(i); 127 127 c = const_mcarb_test.dualValue(i); 128 128 129 129 ignore_unused_variable_warning(am); 130 130 ignore_unused_variable_warning(pm); -
test/min_cost_flow_test.cc
r716 r1081 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-20 095 * Copyright (C) 2003-2011 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). … … 48 48 " 11 0 0 0 0 -10 0\n" 49 49 " 12 -20 -27 0 -30 -30 -20\n" 50 "\n" 50 "\n" 51 51 "@arcs\n" 52 52 " cost cap low1 low2 low3\n" … … 94 94 void constraints() { 95 95 checkConcept<concepts::Digraph, GR>(); 96 96 97 97 const Constraints& me = *this; 98 98 … … 123 123 typedef concepts::WriteMap<Arc, Value> FlowMap; 124 124 typedef concepts::WriteMap<Node, Cost> PotMap; 125 125 126 126 GR g; 127 127 VAM lower; … … 177 177 typename CM, typename SM, typename FM, typename PM > 178 178 bool checkPotential( const GR& gr, const LM& lower, const UM& upper, 179 const CM& cost, const SM& supply, const FM& flow, 179 const CM& cost, const SM& supply, const FM& flow, 180 180 const PM& pi, SupplyType type ) 181 181 { … … 190 190 (red_cost < 0 && flow[e] == upper[e]); 191 191 } 192 192 193 193 for (NodeIt n(gr); opt && n != INVALID; ++n) { 194 194 typename SM::Value sum = 0; … … 203 203 } 204 204 } 205 205 206 206 return opt; 207 207 } … … 228 228 } 229 229 } 230 230 231 231 for (NodeIt n(gr); n != INVALID; ++n) { 232 232 dual_cost -= red_supply[n] * pi[n]; … … 237 237 dual_cost -= (upper[a] - lower[a]) * std::max(-red_cost, 0); 238 238 } 239 239 240 240 return dual_cost == total; 241 241 } … … 309 309 .node("target", w) 310 310 .run(); 311 311 312 312 // Build test digraphs with negative costs 313 313 Digraph neg_gr; … … 319 319 Node n6 = neg_gr.addNode(); 320 320 Node n7 = neg_gr.addNode(); 321 321 322 322 Arc a1 = neg_gr.addArc(n1, n2); 323 323 Arc a2 = neg_gr.addArc(n1, n3); … … 329 329 Arc a8 = neg_gr.addArc(n6, n7); 330 330 Arc a9 = neg_gr.addArc(n7, n5); 331 331 332 332 Digraph::ArcMap<int> neg_c(neg_gr), neg_l1(neg_gr, 0), neg_l2(neg_gr, 0); 333 333 ConstMap<Arc, int> neg_u1(std::numeric_limits<int>::max()), neg_u2(5000); 334 334 Digraph::NodeMap<int> neg_s(neg_gr, 0); 335 335 336 336 neg_l2[a7] = 1000; 337 337 neg_l2[a8] = -1000; 338 338 339 339 neg_s[n1] = 100; 340 340 neg_s[n4] = -100; 341 341 342 342 neg_c[a1] = 100; 343 343 neg_c[a2] = 30; … … 423 423 checkMcf(neg_mcf, neg_mcf.run(), neg_gr, neg_l2, neg_u1, 424 424 neg_c, neg_s, neg_mcf.UNBOUNDED, false, 0, "#A18"); 425 425 426 426 NetworkSimplex<Digraph> negs_mcf(negs_gr); 427 427 negs_mcf.costMap(negs_c).supplyMap(negs_s); -
test/preflow_test.cc
r1027 r1081 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-20 095 * Copyright (C) 2003-2011 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). … … 114 114 b = const_preflow_test.minCut(n); 115 115 const_preflow_test.minCutMap(cut); 116 116 117 117 ignore_unused_variable_warning(fm); 118 118 } … … 155 155 { 156 156 DIGRAPH_TYPEDEFS(SmartDigraph); 157 157 158 158 SmartDigraph g; 159 159 SmartDigraph::ArcMap<int> cap(g),iflow(g); … … 267 267 268 268 initFlowTest(); 269 269 270 270 return 0; 271 271 } -
test/suurballe_test.cc
r670 r1081 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-20 095 * Copyright (C) 2003-2011 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). … … 81 81 typedef Digraph::Arc Arc; 82 82 typedef concepts::ReadMap<Arc, VType> LengthMap; 83 83 84 84 typedef Suurballe<Digraph, LengthMap> SuurballeType; 85 85 … … 105 105 k = suurb_test.findFlow(n, k); 106 106 suurb_test.findPaths(); 107 107 108 108 int f; 109 109 VType c; … … 117 117 k = const_suurb_test.pathNum(); 118 118 Path<Digraph> p = const_suurb_test.path(k); 119 119 120 120 ignore_unused_variable_warning(fm); 121 121 ignore_unused_variable_warning(pm); -
tools/dimacs-solver.cc
r1167 r1168 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-20 095 * Copyright (C) 2003-2011 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). … … 89 89 pre.run(); 90 90 if(report) std::cerr << "Run Preflow: " << ti << '\n'; 91 if(report) std::cerr << "\nMax flow value: " << pre.flowValue() << '\n'; 91 if(report) std::cerr << "\nMax flow value: " << pre.flowValue() << '\n'; 92 92 } 93 93 … … 149 149 if(report) std::cerr << "Run MaxMatching: " << ti << '\n'; 150 150 if(report) std::cerr << "\nCardinality of max matching: " 151 << mat.matchingSize() << '\n'; 151 << mat.matchingSize() << '\n'; 152 152 } 153 153 … … 167 167 exit(1); 168 168 } 169 169 170 170 switch(desc.type) 171 171 { … … 236 236 237 237 DimacsDescriptor desc = dimacsType(is); 238 238 239 239 if(!ap.given("q")) 240 240 { … … 261 261 std::cout << "\n\n"; 262 262 } 263 263 264 264 if(ap.given("double")) 265 265 solve<double>(ap,is,os,desc);
Note: See TracChangeset
for help on using the changeset viewer.