1 /* -*- mode: C++; indent-tabs-mode: nil; -*- |
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-2009 |
5 * Copyright (C) 2003-2010 |
6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport |
6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport |
7 * (Egervary Research Group on Combinatorial Optimization, EGRES). |
7 * (Egervary Research Group on Combinatorial Optimization, EGRES). |
8 * |
8 * |
9 * Permission to use, modify and distribute this software is granted |
9 * Permission to use, modify and distribute this software is granted |
10 * provided that this copyright notice appears in all copies. For |
10 * provided that this copyright notice appears in all copies. For |
419 : Parent(), _node_filter(0), _arc_filter(0) { } |
419 : Parent(), _node_filter(0), _arc_filter(0) { } |
420 |
420 |
421 void initialize(DGR& digraph, NF& node_filter, AF& arc_filter) { |
421 void initialize(DGR& digraph, NF& node_filter, AF& arc_filter) { |
422 Parent::initialize(digraph); |
422 Parent::initialize(digraph); |
423 _node_filter = &node_filter; |
423 _node_filter = &node_filter; |
424 _arc_filter = &arc_filter; |
424 _arc_filter = &arc_filter; |
425 } |
425 } |
426 |
426 |
427 public: |
427 public: |
428 |
428 |
429 typedef typename Parent::Node Node; |
429 typedef typename Parent::Node Node; |
506 } |
506 } |
507 |
507 |
508 public: |
508 public: |
509 |
509 |
510 template <typename V> |
510 template <typename V> |
511 class NodeMap |
511 class NodeMap |
512 : public SubMapExtender<SubDigraphBase<DGR, NF, AF, ch>, |
512 : public SubMapExtender<SubDigraphBase<DGR, NF, AF, ch>, |
513 LEMON_SCOPE_FIX(DigraphAdaptorBase<DGR>, NodeMap<V>)> { |
513 LEMON_SCOPE_FIX(DigraphAdaptorBase<DGR>, NodeMap<V>)> { |
514 typedef SubMapExtender<SubDigraphBase<DGR, NF, AF, ch>, |
514 typedef SubMapExtender<SubDigraphBase<DGR, NF, AF, ch>, |
515 LEMON_SCOPE_FIX(DigraphAdaptorBase<DGR>, NodeMap<V>)> Parent; |
515 LEMON_SCOPE_FIX(DigraphAdaptorBase<DGR>, NodeMap<V>)> Parent; |
516 |
516 |
517 public: |
517 public: |
518 typedef V Value; |
518 typedef V Value; |
519 |
519 |
520 NodeMap(const SubDigraphBase<DGR, NF, AF, ch>& adaptor) |
520 NodeMap(const SubDigraphBase<DGR, NF, AF, ch>& adaptor) |
533 return *this; |
533 return *this; |
534 } |
534 } |
535 }; |
535 }; |
536 |
536 |
537 template <typename V> |
537 template <typename V> |
538 class ArcMap |
538 class ArcMap |
539 : public SubMapExtender<SubDigraphBase<DGR, NF, AF, ch>, |
539 : public SubMapExtender<SubDigraphBase<DGR, NF, AF, ch>, |
540 LEMON_SCOPE_FIX(DigraphAdaptorBase<DGR>, ArcMap<V>)> { |
540 LEMON_SCOPE_FIX(DigraphAdaptorBase<DGR>, ArcMap<V>)> { |
541 typedef SubMapExtender<SubDigraphBase<DGR, NF, AF, ch>, |
541 typedef SubMapExtender<SubDigraphBase<DGR, NF, AF, ch>, |
542 LEMON_SCOPE_FIX(DigraphAdaptorBase<DGR>, ArcMap<V>)> Parent; |
542 LEMON_SCOPE_FIX(DigraphAdaptorBase<DGR>, ArcMap<V>)> Parent; |
543 |
543 |
544 public: |
544 public: |
545 typedef V Value; |
545 typedef V Value; |
580 : Parent(), _node_filter(0), _arc_filter(0) { } |
580 : Parent(), _node_filter(0), _arc_filter(0) { } |
581 |
581 |
582 void initialize(DGR& digraph, NF& node_filter, AF& arc_filter) { |
582 void initialize(DGR& digraph, NF& node_filter, AF& arc_filter) { |
583 Parent::initialize(digraph); |
583 Parent::initialize(digraph); |
584 _node_filter = &node_filter; |
584 _node_filter = &node_filter; |
585 _arc_filter = &arc_filter; |
585 _arc_filter = &arc_filter; |
586 } |
586 } |
587 |
587 |
588 public: |
588 public: |
589 |
589 |
590 typedef typename Parent::Node Node; |
590 typedef typename Parent::Node Node; |
649 } |
649 } |
650 return arc; |
650 return arc; |
651 } |
651 } |
652 |
652 |
653 template <typename V> |
653 template <typename V> |
654 class NodeMap |
654 class NodeMap |
655 : public SubMapExtender<SubDigraphBase<DGR, NF, AF, false>, |
655 : public SubMapExtender<SubDigraphBase<DGR, NF, AF, false>, |
656 LEMON_SCOPE_FIX(DigraphAdaptorBase<DGR>, NodeMap<V>)> { |
656 LEMON_SCOPE_FIX(DigraphAdaptorBase<DGR>, NodeMap<V>)> { |
657 typedef SubMapExtender<SubDigraphBase<DGR, NF, AF, false>, |
657 typedef SubMapExtender<SubDigraphBase<DGR, NF, AF, false>, |
658 LEMON_SCOPE_FIX(DigraphAdaptorBase<DGR>, NodeMap<V>)> Parent; |
658 LEMON_SCOPE_FIX(DigraphAdaptorBase<DGR>, NodeMap<V>)> Parent; |
659 |
659 |
660 public: |
660 public: |
661 typedef V Value; |
661 typedef V Value; |
662 |
662 |
676 return *this; |
676 return *this; |
677 } |
677 } |
678 }; |
678 }; |
679 |
679 |
680 template <typename V> |
680 template <typename V> |
681 class ArcMap |
681 class ArcMap |
682 : public SubMapExtender<SubDigraphBase<DGR, NF, AF, false>, |
682 : public SubMapExtender<SubDigraphBase<DGR, NF, AF, false>, |
683 LEMON_SCOPE_FIX(DigraphAdaptorBase<DGR>, ArcMap<V>)> { |
683 LEMON_SCOPE_FIX(DigraphAdaptorBase<DGR>, ArcMap<V>)> { |
684 typedef SubMapExtender<SubDigraphBase<DGR, NF, AF, false>, |
684 typedef SubMapExtender<SubDigraphBase<DGR, NF, AF, false>, |
685 LEMON_SCOPE_FIX(DigraphAdaptorBase<DGR>, ArcMap<V>)> Parent; |
685 LEMON_SCOPE_FIX(DigraphAdaptorBase<DGR>, ArcMap<V>)> Parent; |
686 |
686 |
1019 } |
1019 } |
1020 return edge; |
1020 return edge; |
1021 } |
1021 } |
1022 |
1022 |
1023 template <typename V> |
1023 template <typename V> |
1024 class NodeMap |
1024 class NodeMap |
1025 : public SubMapExtender<SubGraphBase<GR, NF, EF, ch>, |
1025 : public SubMapExtender<SubGraphBase<GR, NF, EF, ch>, |
1026 LEMON_SCOPE_FIX(GraphAdaptorBase<GR>, NodeMap<V>)> { |
1026 LEMON_SCOPE_FIX(GraphAdaptorBase<GR>, NodeMap<V>)> { |
1027 typedef SubMapExtender<SubGraphBase<GR, NF, EF, ch>, |
1027 typedef SubMapExtender<SubGraphBase<GR, NF, EF, ch>, |
1028 LEMON_SCOPE_FIX(GraphAdaptorBase<GR>, NodeMap<V>)> Parent; |
1028 LEMON_SCOPE_FIX(GraphAdaptorBase<GR>, NodeMap<V>)> Parent; |
1029 |
1029 |
1030 public: |
1030 public: |
1031 typedef V Value; |
1031 typedef V Value; |
1032 |
1032 |
1046 return *this; |
1046 return *this; |
1047 } |
1047 } |
1048 }; |
1048 }; |
1049 |
1049 |
1050 template <typename V> |
1050 template <typename V> |
1051 class ArcMap |
1051 class ArcMap |
1052 : public SubMapExtender<SubGraphBase<GR, NF, EF, ch>, |
1052 : public SubMapExtender<SubGraphBase<GR, NF, EF, ch>, |
1053 LEMON_SCOPE_FIX(GraphAdaptorBase<GR>, ArcMap<V>)> { |
1053 LEMON_SCOPE_FIX(GraphAdaptorBase<GR>, ArcMap<V>)> { |
1054 typedef SubMapExtender<SubGraphBase<GR, NF, EF, ch>, |
1054 typedef SubMapExtender<SubGraphBase<GR, NF, EF, ch>, |
1055 LEMON_SCOPE_FIX(GraphAdaptorBase<GR>, ArcMap<V>)> Parent; |
1055 LEMON_SCOPE_FIX(GraphAdaptorBase<GR>, ArcMap<V>)> Parent; |
1056 |
1056 |
1057 public: |
1057 public: |
1058 typedef V Value; |
1058 typedef V Value; |
1059 |
1059 |
1073 return *this; |
1073 return *this; |
1074 } |
1074 } |
1075 }; |
1075 }; |
1076 |
1076 |
1077 template <typename V> |
1077 template <typename V> |
1078 class EdgeMap |
1078 class EdgeMap |
1079 : public SubMapExtender<SubGraphBase<GR, NF, EF, ch>, |
1079 : public SubMapExtender<SubGraphBase<GR, NF, EF, ch>, |
1080 LEMON_SCOPE_FIX(GraphAdaptorBase<GR>, EdgeMap<V>)> { |
1080 LEMON_SCOPE_FIX(GraphAdaptorBase<GR>, EdgeMap<V>)> { |
1081 typedef SubMapExtender<SubGraphBase<GR, NF, EF, ch>, |
1081 typedef SubMapExtender<SubGraphBase<GR, NF, EF, ch>, |
1082 LEMON_SCOPE_FIX(GraphAdaptorBase<GR>, EdgeMap<V>)> Parent; |
1082 LEMON_SCOPE_FIX(GraphAdaptorBase<GR>, EdgeMap<V>)> Parent; |
1083 |
1083 |
1084 public: |
1084 public: |
1085 typedef V Value; |
1085 typedef V Value; |
1086 |
1086 |
1115 |
1115 |
1116 typedef SubGraphBase Adaptor; |
1116 typedef SubGraphBase Adaptor; |
1117 protected: |
1117 protected: |
1118 NF* _node_filter; |
1118 NF* _node_filter; |
1119 EF* _edge_filter; |
1119 EF* _edge_filter; |
1120 SubGraphBase() |
1120 SubGraphBase() |
1121 : Parent(), _node_filter(0), _edge_filter(0) { } |
1121 : Parent(), _node_filter(0), _edge_filter(0) { } |
1122 |
1122 |
1123 void initialize(GR& graph, NF& node_filter, EF& edge_filter) { |
1123 void initialize(GR& graph, NF& node_filter, EF& edge_filter) { |
1124 Parent::initialize(graph); |
1124 Parent::initialize(graph); |
1125 _node_filter = &node_filter; |
1125 _node_filter = &node_filter; |
1126 _edge_filter = &edge_filter; |
1126 _edge_filter = &edge_filter; |
1217 } |
1217 } |
1218 return edge; |
1218 return edge; |
1219 } |
1219 } |
1220 |
1220 |
1221 template <typename V> |
1221 template <typename V> |
1222 class NodeMap |
1222 class NodeMap |
1223 : public SubMapExtender<SubGraphBase<GR, NF, EF, false>, |
1223 : public SubMapExtender<SubGraphBase<GR, NF, EF, false>, |
1224 LEMON_SCOPE_FIX(GraphAdaptorBase<GR>, NodeMap<V>)> { |
1224 LEMON_SCOPE_FIX(GraphAdaptorBase<GR>, NodeMap<V>)> { |
1225 typedef SubMapExtender<SubGraphBase<GR, NF, EF, false>, |
1225 typedef SubMapExtender<SubGraphBase<GR, NF, EF, false>, |
1226 LEMON_SCOPE_FIX(GraphAdaptorBase<GR>, NodeMap<V>)> Parent; |
1226 LEMON_SCOPE_FIX(GraphAdaptorBase<GR>, NodeMap<V>)> Parent; |
1227 |
1227 |
1228 public: |
1228 public: |
1229 typedef V Value; |
1229 typedef V Value; |
1230 |
1230 |
1244 return *this; |
1244 return *this; |
1245 } |
1245 } |
1246 }; |
1246 }; |
1247 |
1247 |
1248 template <typename V> |
1248 template <typename V> |
1249 class ArcMap |
1249 class ArcMap |
1250 : public SubMapExtender<SubGraphBase<GR, NF, EF, false>, |
1250 : public SubMapExtender<SubGraphBase<GR, NF, EF, false>, |
1251 LEMON_SCOPE_FIX(GraphAdaptorBase<GR>, ArcMap<V>)> { |
1251 LEMON_SCOPE_FIX(GraphAdaptorBase<GR>, ArcMap<V>)> { |
1252 typedef SubMapExtender<SubGraphBase<GR, NF, EF, false>, |
1252 typedef SubMapExtender<SubGraphBase<GR, NF, EF, false>, |
1253 LEMON_SCOPE_FIX(GraphAdaptorBase<GR>, ArcMap<V>)> Parent; |
1253 LEMON_SCOPE_FIX(GraphAdaptorBase<GR>, ArcMap<V>)> Parent; |
1254 |
1254 |
1255 public: |
1255 public: |
1256 typedef V Value; |
1256 typedef V Value; |
1257 |
1257 |
1271 return *this; |
1271 return *this; |
1272 } |
1272 } |
1273 }; |
1273 }; |
1274 |
1274 |
1275 template <typename V> |
1275 template <typename V> |
1276 class EdgeMap |
1276 class EdgeMap |
1277 : public SubMapExtender<SubGraphBase<GR, NF, EF, false>, |
1277 : public SubMapExtender<SubGraphBase<GR, NF, EF, false>, |
1278 LEMON_SCOPE_FIX(GraphAdaptorBase<GR>, EdgeMap<V>)> { |
1278 LEMON_SCOPE_FIX(GraphAdaptorBase<GR>, EdgeMap<V>)> { |
1279 typedef SubMapExtender<SubGraphBase<GR, NF, EF, false>, |
1279 typedef SubMapExtender<SubGraphBase<GR, NF, EF, false>, |
1280 LEMON_SCOPE_FIX(GraphAdaptorBase<GR>, EdgeMap<V>)> Parent; |
1280 LEMON_SCOPE_FIX(GraphAdaptorBase<GR>, EdgeMap<V>)> Parent; |
1281 |
1281 |
1282 public: |
1282 public: |
1283 typedef V Value; |
1283 typedef V Value; |
1284 |
1284 |
1285 EdgeMap(const SubGraphBase<GR, NF, EF, false>& adaptor) |
1285 EdgeMap(const SubGraphBase<GR, NF, EF, false>& adaptor) |
1502 public DigraphAdaptorExtender< |
1502 public DigraphAdaptorExtender< |
1503 SubDigraphBase<GR, NF, ConstMap<typename GR::Arc, Const<bool, true> >, |
1503 SubDigraphBase<GR, NF, ConstMap<typename GR::Arc, Const<bool, true> >, |
1504 true> > { |
1504 true> > { |
1505 #endif |
1505 #endif |
1506 typedef DigraphAdaptorExtender< |
1506 typedef DigraphAdaptorExtender< |
1507 SubDigraphBase<GR, NF, ConstMap<typename GR::Arc, Const<bool, true> >, |
1507 SubDigraphBase<GR, NF, ConstMap<typename GR::Arc, Const<bool, true> >, |
1508 true> > Parent; |
1508 true> > Parent; |
1509 |
1509 |
1510 public: |
1510 public: |
1511 |
1511 |
1512 typedef GR Digraph; |
1512 typedef GR Digraph; |
1523 |
1523 |
1524 /// \brief Constructor |
1524 /// \brief Constructor |
1525 /// |
1525 /// |
1526 /// Creates a subgraph for the given digraph or graph with the |
1526 /// Creates a subgraph for the given digraph or graph with the |
1527 /// given node filter map. |
1527 /// given node filter map. |
1528 FilterNodes(GR& graph, NF& node_filter) |
1528 FilterNodes(GR& graph, NF& node_filter) |
1529 : Parent(), const_true_map() |
1529 : Parent(), const_true_map() |
1530 { |
1530 { |
1531 Parent::initialize(graph, node_filter, const_true_map); |
1531 Parent::initialize(graph, node_filter, const_true_map); |
1532 } |
1532 } |
1533 |
1533 |
1561 |
1561 |
1562 template<typename GR, typename NF> |
1562 template<typename GR, typename NF> |
1563 class FilterNodes<GR, NF, |
1563 class FilterNodes<GR, NF, |
1564 typename enable_if<UndirectedTagIndicator<GR> >::type> : |
1564 typename enable_if<UndirectedTagIndicator<GR> >::type> : |
1565 public GraphAdaptorExtender< |
1565 public GraphAdaptorExtender< |
1566 SubGraphBase<GR, NF, ConstMap<typename GR::Edge, Const<bool, true> >, |
1566 SubGraphBase<GR, NF, ConstMap<typename GR::Edge, Const<bool, true> >, |
1567 true> > { |
1567 true> > { |
1568 |
1568 |
1569 typedef GraphAdaptorExtender< |
1569 typedef GraphAdaptorExtender< |
1570 SubGraphBase<GR, NF, ConstMap<typename GR::Edge, Const<bool, true> >, |
1570 SubGraphBase<GR, NF, ConstMap<typename GR::Edge, Const<bool, true> >, |
1571 true> > Parent; |
1571 true> > Parent; |
1572 |
1572 |
1573 public: |
1573 public: |
1574 |
1574 |
1575 typedef GR Graph; |
1575 typedef GR Graph; |
1651 public DigraphAdaptorExtender< |
1651 public DigraphAdaptorExtender< |
1652 SubDigraphBase<DGR, ConstMap<typename DGR::Node, Const<bool, true> >, |
1652 SubDigraphBase<DGR, ConstMap<typename DGR::Node, Const<bool, true> >, |
1653 AF, false> > { |
1653 AF, false> > { |
1654 #endif |
1654 #endif |
1655 typedef DigraphAdaptorExtender< |
1655 typedef DigraphAdaptorExtender< |
1656 SubDigraphBase<DGR, ConstMap<typename DGR::Node, Const<bool, true> >, |
1656 SubDigraphBase<DGR, ConstMap<typename DGR::Node, Const<bool, true> >, |
1657 AF, false> > Parent; |
1657 AF, false> > Parent; |
1658 |
1658 |
1659 public: |
1659 public: |
1660 |
1660 |
1661 /// The type of the adapted digraph. |
1661 /// The type of the adapted digraph. |
1759 #else |
1759 #else |
1760 template<typename GR, |
1760 template<typename GR, |
1761 typename EF = typename GR::template EdgeMap<bool> > |
1761 typename EF = typename GR::template EdgeMap<bool> > |
1762 class FilterEdges : |
1762 class FilterEdges : |
1763 public GraphAdaptorExtender< |
1763 public GraphAdaptorExtender< |
1764 SubGraphBase<GR, ConstMap<typename GR::Node, Const<bool, true> >, |
1764 SubGraphBase<GR, ConstMap<typename GR::Node, Const<bool, true> >, |
1765 EF, false> > { |
1765 EF, false> > { |
1766 #endif |
1766 #endif |
1767 typedef GraphAdaptorExtender< |
1767 typedef GraphAdaptorExtender< |
1768 SubGraphBase<GR, ConstMap<typename GR::Node, Const<bool, true > >, |
1768 SubGraphBase<GR, ConstMap<typename GR::Node, Const<bool, true > >, |
1769 EF, false> > Parent; |
1769 EF, false> > Parent; |
1770 |
1770 |
1771 public: |
1771 public: |
1772 |
1772 |
1773 /// The type of the adapted graph. |
1773 /// The type of the adapted graph. |
1788 |
1788 |
1789 /// \brief Constructor |
1789 /// \brief Constructor |
1790 /// |
1790 /// |
1791 /// Creates a subgraph for the given graph with the given edge |
1791 /// Creates a subgraph for the given graph with the given edge |
1792 /// filter map. |
1792 /// filter map. |
1793 FilterEdges(GR& graph, EF& edge_filter) |
1793 FilterEdges(GR& graph, EF& edge_filter) |
1794 : Parent(), const_true_map() { |
1794 : Parent(), const_true_map() { |
1795 Parent::initialize(graph, const_true_map, edge_filter); |
1795 Parent::initialize(graph, const_true_map, edge_filter); |
1796 } |
1796 } |
1797 |
1797 |
1798 /// \brief Sets the status of the given edge |
1798 /// \brief Sets the status of the given edge |
2096 |
2096 |
2097 ArcMapBase(const UndirectorBase<DGR>& adaptor) : |
2097 ArcMapBase(const UndirectorBase<DGR>& adaptor) : |
2098 _forward(*adaptor._digraph), _backward(*adaptor._digraph) {} |
2098 _forward(*adaptor._digraph), _backward(*adaptor._digraph) {} |
2099 |
2099 |
2100 ArcMapBase(const UndirectorBase<DGR>& adaptor, const V& value) |
2100 ArcMapBase(const UndirectorBase<DGR>& adaptor, const V& value) |
2101 : _forward(*adaptor._digraph, value), |
2101 : _forward(*adaptor._digraph, value), |
2102 _backward(*adaptor._digraph, value) {} |
2102 _backward(*adaptor._digraph, value) {} |
2103 |
2103 |
2104 void set(const Arc& a, const V& value) { |
2104 void set(const Arc& a, const V& value) { |
2105 if (direction(a)) { |
2105 if (direction(a)) { |
2106 _forward.set(a, value); |
2106 _forward.set(a, value); |
2214 typedef typename ItemSetTraits<DGR, Node>::ItemNotifier NodeNotifier; |
2214 typedef typename ItemSetTraits<DGR, Node>::ItemNotifier NodeNotifier; |
2215 NodeNotifier& notifier(Node) const { return _digraph->notifier(Node()); } |
2215 NodeNotifier& notifier(Node) const { return _digraph->notifier(Node()); } |
2216 |
2216 |
2217 typedef typename ItemSetTraits<DGR, Edge>::ItemNotifier EdgeNotifier; |
2217 typedef typename ItemSetTraits<DGR, Edge>::ItemNotifier EdgeNotifier; |
2218 EdgeNotifier& notifier(Edge) const { return _digraph->notifier(Edge()); } |
2218 EdgeNotifier& notifier(Edge) const { return _digraph->notifier(Edge()); } |
2219 |
2219 |
2220 typedef EdgeNotifier ArcNotifier; |
2220 typedef EdgeNotifier ArcNotifier; |
2221 ArcNotifier& notifier(Arc) const { return _digraph->notifier(Edge()); } |
2221 ArcNotifier& notifier(Arc) const { return _digraph->notifier(Edge()); } |
2222 |
2222 |
2223 protected: |
2223 protected: |
2224 |
2224 |
2726 #else |
2726 #else |
2727 template<typename DGR, |
2727 template<typename DGR, |
2728 typename CM = typename DGR::template ArcMap<int>, |
2728 typename CM = typename DGR::template ArcMap<int>, |
2729 typename FM = CM, |
2729 typename FM = CM, |
2730 typename TL = Tolerance<typename CM::Value> > |
2730 typename TL = Tolerance<typename CM::Value> > |
2731 class ResidualDigraph |
2731 class ResidualDigraph |
2732 : public SubDigraph< |
2732 : public SubDigraph< |
2733 Undirector<const DGR>, |
2733 Undirector<const DGR>, |
2734 ConstMap<typename DGR::Node, Const<bool, true> >, |
2734 ConstMap<typename DGR::Node, Const<bool, true> >, |
2735 typename Undirector<const DGR>::template CombinedArcMap< |
2735 typename Undirector<const DGR>::template CombinedArcMap< |
2736 _adaptor_bits::ResForwardFilter<const DGR, CM, FM, TL>, |
2736 _adaptor_bits::ResForwardFilter<const DGR, CM, FM, TL>, |
2783 /// |
2783 /// |
2784 /// Constructor of the residual digraph adaptor. The parameters are the |
2784 /// Constructor of the residual digraph adaptor. The parameters are the |
2785 /// digraph, the capacity map, the flow map, and a tolerance object. |
2785 /// digraph, the capacity map, the flow map, and a tolerance object. |
2786 ResidualDigraph(const DGR& digraph, const CM& capacity, |
2786 ResidualDigraph(const DGR& digraph, const CM& capacity, |
2787 FM& flow, const TL& tolerance = Tolerance()) |
2787 FM& flow, const TL& tolerance = Tolerance()) |
2788 : Parent(), _capacity(&capacity), _flow(&flow), |
2788 : Parent(), _capacity(&capacity), _flow(&flow), |
2789 _graph(digraph), _node_filter(), |
2789 _graph(digraph), _node_filter(), |
2790 _forward_filter(capacity, flow, tolerance), |
2790 _forward_filter(capacity, flow, tolerance), |
2791 _backward_filter(capacity, flow, tolerance), |
2791 _backward_filter(capacity, flow, tolerance), |
2792 _arc_filter(_forward_filter, _backward_filter) |
2792 _arc_filter(_forward_filter, _backward_filter) |
2793 { |
2793 { |
2865 typedef Arc Key; |
2865 typedef Arc Key; |
2866 /// The value type of the map |
2866 /// The value type of the map |
2867 typedef typename CapacityMap::Value Value; |
2867 typedef typename CapacityMap::Value Value; |
2868 |
2868 |
2869 /// Constructor |
2869 /// Constructor |
2870 ResidualCapacity(const ResidualDigraph<DGR, CM, FM, TL>& adaptor) |
2870 ResidualCapacity(const ResidualDigraph<DGR, CM, FM, TL>& adaptor) |
2871 : _adaptor(&adaptor) {} |
2871 : _adaptor(&adaptor) {} |
2872 |
2872 |
2873 /// Returns the value associated with the given residual arc |
2873 /// Returns the value associated with the given residual arc |
2874 Value operator[](const Arc& a) const { |
2874 Value operator[](const Arc& a) const { |
2875 return _adaptor->residualCapacity(a); |
2875 return _adaptor->residualCapacity(a); |
3445 /// \brief Node map combined from two original node maps |
3445 /// \brief Node map combined from two original node maps |
3446 /// |
3446 /// |
3447 /// This map adaptor class adapts two node maps of the original digraph |
3447 /// This map adaptor class adapts two node maps of the original digraph |
3448 /// to get a node map of the split digraph. |
3448 /// to get a node map of the split digraph. |
3449 /// Its value type is inherited from the first node map type (\c IN). |
3449 /// Its value type is inherited from the first node map type (\c IN). |
3450 /// \tparam IN The type of the node map for the in-nodes. |
3450 /// \tparam IN The type of the node map for the in-nodes. |
3451 /// \tparam OUT The type of the node map for the out-nodes. |
3451 /// \tparam OUT The type of the node map for the out-nodes. |
3452 template <typename IN, typename OUT> |
3452 template <typename IN, typename OUT> |
3453 class CombinedNodeMap { |
3453 class CombinedNodeMap { |
3454 public: |
3454 public: |
3455 |
3455 |