Changeset 1081:f1398882a928 in lemon
- Timestamp:
- 08/08/11 12:36:16 (13 years ago)
- Branch:
- 1.1
- Phase:
- public
- Tags:
- r1.1.4
- Files:
-
- 68 edited
Legend:
- Unmodified
- Added
- Removed
-
doc/groups.dox
r844 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). … … 276 276 This group contains the algorithms for finding shortest paths in digraphs. 277 277 278 - \ref Dijkstra Dijkstra's algorithm for finding shortest paths from a 278 - \ref Dijkstra Dijkstra's algorithm for finding shortest paths from a 279 279 source node when all arc lengths are non-negative. 280 280 - \ref Suurballe A successive shortest path algorithm for finding … … 307 307 308 308 309 \ref Circulation is a preflow push-relabel algorithm implemented directly 309 \ref Circulation is a preflow push-relabel algorithm implemented directly 310 310 for finding feasible circulations, which is a somewhat different problem, 311 311 but it is strongly related to maximum flow. -
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
r703 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). … … 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
r1064 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
r967 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). … … 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
r1064 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
r566 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/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
r735 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). … … 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
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/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
r713 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). … … 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 /// … … 123 123 /// This class describes the base interface of directed graph types. 124 124 /// All digraph %concepts have to conform to this class. 125 /// It just provides types for nodes and arcs and functions 125 /// It just provides types for nodes and arcs and functions 126 126 /// to get the source and the target nodes of arcs. 127 127 class BaseDigraphComponent { … … 427 427 /// \brief Concept class for \c NodeIt, \c ArcIt and \c EdgeIt types. 428 428 /// 429 /// This class describes the concept of \c NodeIt, \c ArcIt and 429 /// This class describes the concept of \c NodeIt, \c ArcIt and 430 430 /// \c EdgeIt subtypes of digraph and graph types. 431 431 template <typename GR, typename Item> … … 467 467 /// next item. 468 468 GraphItemIt& operator++() { return *this; } 469 469 470 470 /// \brief Equality operator 471 471 /// … … 502 502 }; 503 503 504 /// \brief Concept class for \c InArcIt, \c OutArcIt and 504 /// \brief Concept class for \c InArcIt, \c OutArcIt and 505 505 /// \c IncEdgeIt types. 506 506 /// 507 /// This class describes the concept of \c InArcIt, \c OutArcIt 507 /// This class describes the concept of \c InArcIt, \c OutArcIt 508 508 /// and \c IncEdgeIt subtypes of digraph and graph types. 509 509 /// 510 510 /// \note Since these iterator classes do not inherit from the same 511 511 /// base class, there is an additional template parameter (selector) 512 /// \c sel. For \c InArcIt you should instantiate it with character 512 /// \c sel. For \c InArcIt you should instantiate it with character 513 513 /// \c 'i', for \c OutArcIt with \c 'o' and for \c IncEdgeIt with \c 'e'. 514 514 template <typename GR, … … 531 531 GraphIncIt(const GraphIncIt& it) : Item(it) {} 532 532 533 /// \brief Constructor that sets the iterator to the first 533 /// \brief Constructor that sets the iterator to the first 534 534 /// incoming or outgoing arc. 535 535 /// 536 /// Constructor that sets the iterator to the first arc 536 /// Constructor that sets the iterator to the first arc 537 537 /// incoming to or outgoing from the given node. 538 538 explicit GraphIncIt(const GR&, const Base&) {} … … 805 805 /// \brief Return the first edge incident to the given node. 806 806 /// 807 /// This function gives back the first edge incident to the given 807 /// This function gives back the first edge incident to the given 808 808 /// node. The bool parameter gives back the direction for which the 809 /// source node of the directed arc representing the edge is the 809 /// source node of the directed arc representing the edge is the 810 810 /// given node. 811 811 void firstInc(Edge&, bool&, const Node&) const {} … … 814 814 /// given node. 815 815 /// 816 /// This function gives back the next edge incident to the given 816 /// This function gives back the next edge incident to the given 817 817 /// node. The bool parameter should be used as \c firstInc() use it. 818 818 void nextInc(Edge&, bool&) const {} … … 991 991 /// 992 992 /// This class describes the concept of standard graph maps, i.e. 993 /// the \c NodeMap, \c ArcMap and \c EdgeMap subtypes of digraph and 993 /// the \c NodeMap, \c ArcMap and \c EdgeMap subtypes of digraph and 994 994 /// graph types, which can be used for associating data to graph items. 995 995 /// The standard graph maps must conform to the ReferenceMap concept. … … 1046 1046 _Map m1(g); 1047 1047 _Map m2(g,t); 1048 1048 1049 1049 // Copy constructor 1050 1050 // _Map m3(m); … … 1069 1069 /// 1070 1070 /// This class describes the interface of mappable directed graphs. 1071 /// It extends \ref BaseDigraphComponent with the standard digraph 1071 /// It extends \ref BaseDigraphComponent with the standard digraph 1072 1072 /// map classes, namely \c NodeMap and \c ArcMap. 1073 1073 /// This concept is part of the Digraph concept. … … 1206 1206 /// 1207 1207 /// This class describes the interface of mappable undirected graphs. 1208 /// It extends \ref MappableDigraphComponent with the standard graph 1208 /// It extends \ref MappableDigraphComponent with the standard graph 1209 1209 /// map class for edges (\c EdgeMap). 1210 1210 /// This concept is part of the Graph concept. … … 1291 1291 /// 1292 1292 /// This class describes the interface of extendable directed graphs. 1293 /// It extends \ref BaseDigraphComponent with functions for adding 1293 /// It extends \ref BaseDigraphComponent with functions for adding 1294 1294 /// nodes and arcs to the digraph. 1295 1295 /// This concept requires \ref AlterableDigraphComponent. … … 1335 1335 /// 1336 1336 /// This class describes the interface of extendable undirected graphs. 1337 /// It extends \ref BaseGraphComponent with functions for adding 1337 /// It extends \ref BaseGraphComponent with functions for adding 1338 1338 /// nodes and edges to the graph. 1339 1339 /// This concept requires \ref AlterableGraphComponent. … … 1379 1379 /// 1380 1380 /// This class describes the interface of erasable directed graphs. 1381 /// It extends \ref BaseDigraphComponent with functions for removing 1381 /// It extends \ref BaseDigraphComponent with functions for removing 1382 1382 /// nodes and arcs from the digraph. 1383 1383 /// This concept requires \ref AlterableDigraphComponent. … … 1392 1392 /// \brief Erase a node from the digraph. 1393 1393 /// 1394 /// This function erases the given node from the digraph and all arcs 1394 /// This function erases the given node from the digraph and all arcs 1395 1395 /// connected to the node. 1396 1396 void erase(const Node&) {} … … 1418 1418 /// 1419 1419 /// This class describes the interface of erasable undirected graphs. 1420 /// It extends \ref BaseGraphComponent with functions for removing 1420 /// It extends \ref BaseGraphComponent with functions for removing 1421 1421 /// nodes and edges from the graph. 1422 1422 /// This concept requires \ref AlterableGraphComponent. -
lemon/concepts/maps.h
r1064 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/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
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). … … 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
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). … … 457 457 458 458 void CplexBase::_applyMessageLevel() { 459 CPXsetintparam(cplexEnv(), CPX_PARAM_SCRIND, 459 CPXsetintparam(cplexEnv(), CPX_PARAM_SCRIND, 460 460 _message_enabled ? CPX_ON : CPX_OFF); 461 461 } -
lemon/dfs.h
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). -
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
r908 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/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
r631 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). … … 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
r868 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). … … 967 967 }; 968 968 969 969 970 970 template <typename From, typename To, 971 971 bool revEnable = RevPathTagIndicator<From>::value> … … 973 973 static void copy(const From& from, To& to) { 974 974 PathCopySelectorForward<From, To>::copy(from, to); 975 } 975 } 976 976 }; 977 977 … … 980 980 static void copy(const From& from, To& to) { 981 981 PathCopySelectorBackward<From, To>::copy(from, to); 982 } 982 } 983 983 }; 984 984 -
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
r928 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/unionfind.h
r946 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/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
r696 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). … … 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."); … … 83 83 check(countBiEdgeConnectedComponents(g) == 1, 84 84 "This graph has 1 bi-edge-connected component"); 85 85 86 86 check(dag(d), "This digraph is DAG."); 87 87 check(checkedTopologicalSort(d, order), "This digraph is DAG."); … … 102 102 Digraph::NodeMap<int> order(d); 103 103 Graph g(d); 104 104 105 105 Digraph::Node n1 = d.addNode(); 106 106 Digraph::Node n2 = d.addNode(); … … 109 109 Digraph::Node n5 = d.addNode(); 110 110 Digraph::Node n6 = d.addNode(); 111 111 112 112 d.addArc(n1, n3); 113 113 d.addArc(n3, n2); … … 137 137 check(!parallelFree(g), "This graph is not parallel-free."); 138 138 check(!simpleGraph(g), "This graph is not simple."); 139 139 140 140 d.addArc(n3, n3); 141 141 142 142 check(!loopFree(d), "This digraph is not loop-free."); 143 143 check(!loopFree(g), "This graph is not loop-free."); 144 144 check(!simpleGraph(d), "This digraph is not simple."); 145 145 146 146 d.addArc(n3, n2); 147 147 148 148 check(!parallelFree(d), "This digraph is not parallel-free."); 149 149 } 150 150 151 151 { 152 152 Digraph d; 153 153 Digraph::ArcMap<bool> cutarcs(d, false); 154 154 Graph g(d); 155 155 156 156 Digraph::Node n1 = d.addNode(); 157 157 Digraph::Node n2 = d.addNode(); … … 173 173 d.addArc(n6, n7); 174 174 d.addArc(n7, n6); 175 175 176 176 check(!stronglyConnected(d), "This digraph is not strongly connected"); 177 177 check(countStronglyConnectedComponents(d) == 3, … … 236 236 Digraph d; 237 237 Digraph::NodeMap<int> order(d); 238 238 239 239 Digraph::Node belt = d.addNode(); 240 240 Digraph::Node trousers = d.addNode(); … … 256 256 d.addArc(shirt, necktie); 257 257 d.addArc(necktie, coat); 258 258 259 259 check(dag(d), "This digraph is DAG."); 260 260 topologicalSort(d, order); … … 268 268 ListGraph g; 269 269 ListGraph::NodeMap<bool> map(g); 270 270 271 271 ListGraph::Node n1 = g.addNode(); 272 272 ListGraph::Node n2 = g.addNode(); … … 284 284 g.addEdge(n4, n7); 285 285 g.addEdge(n5, n7); 286 286 287 287 check(bipartite(g), "This graph is bipartite"); 288 288 check(bipartitePartitions(g, map), "This graph is bipartite"); 289 289 290 290 check(map[n1] == map[n2] && map[n1] == map[n6] && map[n1] == map[n7], 291 291 "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
r559 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). -
test/euler_test.cc
r639 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 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); … … 129 129 Digraph::Node n2 = d.addNode(); 130 130 Digraph::Node n3 = d.addNode(); 131 131 132 132 d.addArc(n1, n2); 133 133 d.addArc(n2, n1); … … 154 154 Digraph::Node n5 = d.addNode(); 155 155 Digraph::Node n6 = d.addNode(); 156 156 157 157 d.addArc(n1, n2); 158 158 d.addArc(n2, n4); … … 190 190 Digraph::Node n4 = d.addNode(); 191 191 Digraph::Node n5 = d.addNode(); 192 192 193 193 d.addArc(n1, n2); 194 194 d.addArc(n2, n3); … … 212 212 Digraph::Node n2 = d.addNode(); 213 213 Digraph::Node n3 = d.addNode(); 214 214 215 215 d.addArc(n1, n2); 216 216 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
r1064 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
r1067 r1078 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& error) 120 catch (FormatError& error) 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/maps_test.cc
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). … … 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 … … 201 203 202 204 checkConcept<ReadMap<A,B>, MapToFunctor<ReadMap<A,B> > >(); 203 MapToFunctor<ReadMap<A,B> > map = MapToFunctor<ReadMap<A,B> >(ReadMap<A,B>()); 205 MapToFunctor<ReadMap<A,B> > map = 206 MapToFunctor<ReadMap<A,B> >(ReadMap<A,B>()); 204 207 205 208 check(functorToMap(&func)[A()] == 3, … … 350 353 check(v1[i++] == *it, "Something is wrong with LoggerBoolMap"); 351 354 } 352 355 353 356 // CrossRefMap 354 357 { … … 358 361 checkConcept<ReadWriteMap<Node, int>, 359 362 CrossRefMap<Graph, Node, int> >(); 360 363 361 364 Graph gr; 362 365 typedef CrossRefMap<Graph, Node, char> CRMap; 363 366 typedef CRMap::ValueIterator ValueIt; 364 367 CRMap map(gr); 365 368 366 369 Node n0 = gr.addNode(); 367 370 Node n1 = gr.addNode(); 368 371 Node n2 = gr.addNode(); 369 372 370 373 map.set(n0, 'A'); 371 374 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
r691 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). … … 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 … … 148 148 if(report) std::cerr << "Run MaxMatching: " << ti << '\n'; 149 149 if(report) std::cerr << "\nCardinality of max matching: " 150 << mat.matchingSize() << '\n'; 150 << mat.matchingSize() << '\n'; 151 151 } 152 152 … … 166 166 exit(1); 167 167 } 168 168 169 169 switch(desc.type) 170 170 { … … 238 238 239 239 DimacsDescriptor desc = dimacsType(is); 240 240 241 241 if(!ap.given("q")) 242 242 { … … 263 263 std::cout << "\n\n"; 264 264 } 265 265 266 266 if(ap.given("double")) 267 267 solve<double>(ap,is,os,desc);
Note: See TracChangeset
for help on using the changeset viewer.