0
2
0
... | ... |
@@ -2663,16 +2663,16 @@ |
2663 | 2663 |
|
2664 | 2664 |
/// \ingroup graph_adaptors |
2665 | 2665 |
/// |
2666 | 2666 |
/// \brief Adaptor class for composing the residual digraph for directed |
2667 | 2667 |
/// flow and circulation problems. |
2668 | 2668 |
/// |
2669 |
/// Residual can be used for composing the \e residual digraph for directed |
|
2670 |
/// flow and circulation problems. Let \f$ G=(V, A) \f$ be a directed graph |
|
2671 |
/// and let \f$ F \f$ be a number type. Let \f$ flow, cap: A\to F \f$ be |
|
2672 |
/// functions on the arcs. |
|
2669 |
/// ResidualDigraph can be used for composing the \e residual digraph |
|
2670 |
/// for directed flow and circulation problems. Let \f$ G=(V, A) \f$ |
|
2671 |
/// be a directed graph and let \f$ F \f$ be a number type. |
|
2672 |
/// Let \f$ flow, cap: A\to F \f$ be functions on the arcs. |
|
2673 | 2673 |
/// This adaptor implements a digraph structure with node set \f$ V \f$ |
2674 | 2674 |
/// and arc set \f$ A_{forward}\cup A_{backward} \f$, |
2675 | 2675 |
/// where \f$ A_{forward}=\{uv : uv\in A, flow(uv)<cap(uv)\} \f$ and |
2676 | 2676 |
/// \f$ A_{backward}=\{vu : uv\in A, flow(uv)>0\} \f$, i.e. the so |
2677 | 2677 |
/// called residual digraph. |
2678 | 2678 |
/// When the union \f$ A_{forward}\cup A_{backward} \f$ is taken, |
... | ... |
@@ -2701,19 +2701,19 @@ |
2701 | 2701 |
/// |
2702 | 2702 |
/// \note The \c Node type of this adaptor and the adapted digraph are |
2703 | 2703 |
/// convertible to each other, moreover the \c Arc type of the adaptor |
2704 | 2704 |
/// is convertible to the \c Arc type of the adapted digraph. |
2705 | 2705 |
#ifdef DOXYGEN |
2706 | 2706 |
template<typename GR, typename CM, typename FM, typename TL> |
2707 |
class |
|
2707 |
class ResidualDigraph |
|
2708 | 2708 |
#else |
2709 | 2709 |
template<typename GR, |
2710 | 2710 |
typename CM = typename GR::template ArcMap<int>, |
2711 | 2711 |
typename FM = CM, |
2712 | 2712 |
typename TL = Tolerance<typename CM::Value> > |
2713 |
class |
|
2713 |
class ResidualDigraph : |
|
2714 | 2714 |
public FilterArcs< |
2715 | 2715 |
Undirector<const GR>, |
2716 | 2716 |
typename Undirector<const GR>::template CombinedArcMap< |
2717 | 2717 |
_adaptor_bits::ResForwardFilter<const GR, CM, FM, TL>, |
2718 | 2718 |
_adaptor_bits::ResBackwardFilter<const GR, CM, FM, TL> > > |
2719 | 2719 |
#endif |
... | ... |
@@ -2727,13 +2727,13 @@ |
2727 | 2727 |
/// The type of the flow map. |
2728 | 2728 |
typedef FM FlowMap; |
2729 | 2729 |
/// The tolerance type. |
2730 | 2730 |
typedef TL Tolerance; |
2731 | 2731 |
|
2732 | 2732 |
typedef typename CapacityMap::Value Value; |
2733 |
typedef |
|
2733 |
typedef ResidualDigraph Adaptor; |
|
2734 | 2734 |
|
2735 | 2735 |
protected: |
2736 | 2736 |
|
2737 | 2737 |
typedef Undirector<const Digraph> Undirected; |
2738 | 2738 |
|
2739 | 2739 |
typedef _adaptor_bits::ResForwardFilter<const Digraph, CapacityMap, |
... | ... |
@@ -2758,14 +2758,14 @@ |
2758 | 2758 |
public: |
2759 | 2759 |
|
2760 | 2760 |
/// \brief Constructor |
2761 | 2761 |
/// |
2762 | 2762 |
/// Constructor of the residual digraph adaptor. The parameters are the |
2763 | 2763 |
/// digraph, the capacity map, the flow map, and a tolerance object. |
2764 |
Residual(const Digraph& digraph, const CapacityMap& capacity, |
|
2765 |
FlowMap& flow, const Tolerance& tolerance = Tolerance()) |
|
2764 |
ResidualDigraph(const Digraph& digraph, const CapacityMap& capacity, |
|
2765 |
FlowMap& flow, const Tolerance& tolerance = Tolerance()) |
|
2766 | 2766 |
: Parent(), _capacity(&capacity), _flow(&flow), _graph(digraph), |
2767 | 2767 |
_forward_filter(capacity, flow, tolerance), |
2768 | 2768 |
_backward_filter(capacity, flow, tolerance), |
2769 | 2769 |
_arc_filter(_forward_filter, _backward_filter) |
2770 | 2770 |
{ |
2771 | 2771 |
Parent::setDigraph(_graph); |
... | ... |
@@ -2866,16 +2866,15 @@ |
2866 | 2866 |
/// \brief Returns a (read-only) Residual adaptor |
2867 | 2867 |
/// |
2868 | 2868 |
/// This function just returns a (read-only) \ref Residual adaptor. |
2869 | 2869 |
/// \ingroup graph_adaptors |
2870 | 2870 |
/// \relates Residual |
2871 | 2871 |
template<typename GR, typename CM, typename FM> |
2872 |
Residual<GR, CM, FM> residual(const GR& digraph, |
|
2873 |
const CM& capacity_map, |
|
2874 |
FM& flow_map) { |
|
2875 |
return Residual<GR, CM, FM> (digraph, capacity_map, flow_map); |
|
2872 |
ResidualDigraph<GR, CM, FM> |
|
2873 |
residualDigraph(const GR& digraph, const CM& capacity_map, FM& flow_map) { |
|
2874 |
return ResidualDigraph<GR, CM, FM> (digraph, capacity_map, flow_map); |
|
2876 | 2875 |
} |
2877 | 2876 |
|
2878 | 2877 |
|
2879 | 2878 |
template <typename _Digraph> |
2880 | 2879 |
class SplitNodesBase { |
2881 | 2880 |
public: |
... | ... |
@@ -578,21 +578,21 @@ |
578 | 578 |
Digraph::Arc ad = e3; |
579 | 579 |
ad = e3; |
580 | 580 |
Adaptor::Edge ea = a1; |
581 | 581 |
ea = a2; |
582 | 582 |
} |
583 | 583 |
|
584 |
void |
|
584 |
void checkResidualDigraph() { |
|
585 | 585 |
// Check concepts |
586 |
checkConcept<concepts::Digraph, Residual<concepts::Digraph> >(); |
|
587 |
checkConcept<concepts::Digraph, Residual<ListDigraph> >(); |
|
586 |
checkConcept<concepts::Digraph, ResidualDigraph<concepts::Digraph> >(); |
|
587 |
checkConcept<concepts::Digraph, ResidualDigraph<ListDigraph> >(); |
|
588 | 588 |
|
589 | 589 |
// Create a digraph and an adaptor |
590 | 590 |
typedef ListDigraph Digraph; |
591 | 591 |
typedef Digraph::ArcMap<int> IntArcMap; |
592 |
typedef |
|
592 |
typedef ResidualDigraph<Digraph, IntArcMap> Adaptor; |
|
593 | 593 |
|
594 | 594 |
Digraph digraph; |
595 | 595 |
IntArcMap capacity(digraph), flow(digraph); |
596 | 596 |
Adaptor adaptor(digraph, capacity, flow); |
597 | 597 |
|
598 | 598 |
Digraph::Node n1 = digraph.addNode(); |
... | ... |
@@ -1467,13 +1467,13 @@ |
1467 | 1467 |
// Check the digraph adaptors (using ListDigraph) |
1468 | 1468 |
checkReverseDigraph(); |
1469 | 1469 |
checkSubDigraph(); |
1470 | 1470 |
checkFilterNodes1(); |
1471 | 1471 |
checkFilterArcs(); |
1472 | 1472 |
checkUndirector(); |
1473 |
|
|
1473 |
checkResidualDigraph(); |
|
1474 | 1474 |
checkSplitNodes(); |
1475 | 1475 |
|
1476 | 1476 |
// Check the graph adaptors (using ListGraph) |
1477 | 1477 |
checkSubGraph(); |
1478 | 1478 |
checkFilterNodes2(); |
1479 | 1479 |
checkFilterEdges(); |
0 comments (0 inline)