gravatar
kpeter (Peter Kovacs)
kpeter@inf.elte.hu
Many doc improvements for Preflow (#176) - More precise doc for members. - Add doc for public types. - Hide the doc of the traits class parameter. - Removing \author comments. - Use \tparam for template parameters.
0 1 0
default
1 file changed with 156 insertions and 109 deletions:
↑ Collapse diff ↑
Show white space 6 line context
... ...
@@ -33,9 +33,9 @@
33 33
  /// Default traits class of Preflow class.
34
  /// \param _Graph Digraph type.
35
  /// \param _CapacityMap Type of capacity map.
36
  template <typename _Graph, typename _CapacityMap>
34
  /// \tparam _Digraph Digraph type.
35
  /// \tparam _CapacityMap Capacity map type.
36
  template <typename _Digraph, typename _CapacityMap>
37 37
  struct PreflowDefaultTraits {
38 38

	
39
    /// \brief The digraph type the algorithm runs on.
40
    typedef _Graph Digraph;
39
    /// \brief The type of the digraph the algorithm runs on.
40
    typedef _Digraph Digraph;
41 41

	
... ...
@@ -47,8 +47,8 @@
47 47

	
48
    /// \brief The type of the length of the arcs.
48
    /// \brief The type of the flow values.
49 49
    typedef typename CapacityMap::Value Value;
50 50

	
51
    /// \brief The map type that stores the flow values.
51
    /// \brief The type of the map that stores the flow values.
52 52
    ///
53
    /// The map type that stores the flow values.
53
    /// The type of the map that stores the flow values.
54 54
    /// It must meet the \ref concepts::ReadWriteMap "ReadWriteMap" concept.
... ...
@@ -65,3 +65,3 @@
65 65

	
66
    /// \brief The eleavator type used by Preflow algorithm.
66
    /// \brief The elevator type used by Preflow algorithm.
67 67
    ///
... ...
@@ -75,3 +75,3 @@
75 75
    ///
76
    /// This function instantiates a \ref Elevator.
76
    /// This function instantiates an \ref Elevator.
77 77
    /// \param digraph The digraph, to which we would like to define
... ...
@@ -93,7 +93,7 @@
93 93
  ///
94
  /// \brief %Preflow algorithms class.
94
  /// \brief %Preflow algorithm class.
95 95
  ///
96
  /// This class provides an implementation of the Goldberg's \e
97
  /// preflow \e algorithm producing a flow of maximum value in a
98
  /// digraph. The preflow algorithms are the fastest known max
96
  /// This class provides an implementation of Goldberg-Tarjan's \e preflow
97
  /// \e push-relabel algorithm producing a flow of maximum value in a
98
  /// digraph. The preflow algorithms are the fastest known maximum
99 99
  /// flow algorithms. The current implementation use a mixture of the
... ...
@@ -102,20 +102,15 @@
102 102
  ///
103
  /// The algorithm consists from two phases. After the first phase
104
  /// the maximal flow value and the minimum cut can be obtained. The
105
  /// second phase constructs the feasible maximum flow on each arc.
103
  /// The algorithm consists of two phases. After the first phase
104
  /// the maximum flow value and the minimum cut is obtained. The
105
  /// second phase constructs a feasible maximum flow on each arc.
106 106
  ///
107
  /// \param _Graph The digraph type the algorithm runs on.
108
  /// \param _CapacityMap The flow map type.
109
  /// \param _Traits Traits class to set various data types used by
110
  /// the algorithm.  The default traits class is \ref
111
  /// PreflowDefaultTraits.  See \ref PreflowDefaultTraits for the
112
  /// documentation of a %Preflow traits class.
113
  ///
114
  ///\author Jacint Szabo and Balazs Dezso
107
  /// \tparam _Digraph The type of the digraph the algorithm runs on.
108
  /// \tparam _CapacityMap The type of the capacity map. The default map
109
  /// type is \ref concepts::Digraph::ArcMap "_Digraph::ArcMap<int>".
115 110
#ifdef DOXYGEN
116
  template <typename _Graph, typename _CapacityMap, typename _Traits>
111
  template <typename _Digraph, typename _CapacityMap, typename _Traits>
117 112
#else
118
  template <typename _Graph,
119
            typename _CapacityMap = typename _Graph::template ArcMap<int>,
120
            typename _Traits = PreflowDefaultTraits<_Graph, _CapacityMap> >
113
  template <typename _Digraph,
114
            typename _CapacityMap = typename _Digraph::template ArcMap<int>,
115
            typename _Traits = PreflowDefaultTraits<_Digraph, _CapacityMap> >
121 116
#endif
... ...
@@ -124,9 +119,16 @@
124 119

	
120
    ///The \ref PreflowDefaultTraits "traits class" of the algorithm.
125 121
    typedef _Traits Traits;
122
    ///The type of the digraph the algorithm runs on.
126 123
    typedef typename Traits::Digraph Digraph;
124
    ///The type of the capacity map.
127 125
    typedef typename Traits::CapacityMap CapacityMap;
126
    ///The type of the flow values.
128 127
    typedef typename Traits::Value Value;
129 128

	
129
    ///The type of the flow map.
130 130
    typedef typename Traits::FlowMap FlowMap;
131
    ///The type of the elevator.
131 132
    typedef typename Traits::Elevator Elevator;
133
    ///The type of the tolerance.
132 134
    typedef typename Traits::Tolerance Tolerance;
... ...
@@ -190,3 +192,3 @@
190 192

	
191
    ///\name Named template parameters
193
    ///\name Named Template Parameters
192 194

	
... ...
@@ -207,3 +209,3 @@
207 209
    /// \ref named-templ-param "Named parameter" for setting FlowMap
208
    /// type
210
    /// type.
209 211
    template <typename _FlowMap>
... ...
@@ -228,3 +230,7 @@
228 230
    /// \ref named-templ-param "Named parameter" for setting Elevator
229
    /// type
231
    /// type. If this named parameter is used, then an external
232
    /// elevator object must be passed to the algorithm using the
233
    /// \ref elevator(Elevator&) "elevator()" function before calling
234
    /// \ref run() or \ref init().
235
    /// \sa SetStandardElevator
230 236
    template <typename _Elevator>
... ...
@@ -245,7 +251,13 @@
245 251
    /// \brief \ref named-templ-param "Named parameter" for setting
246
    /// Elevator type
252
    /// Elevator type with automatic allocation
247 253
    ///
248 254
    /// \ref named-templ-param "Named parameter" for setting Elevator
249
    /// type. The Elevator should be standard constructor interface, ie.
250
    /// the digraph and the maximum level should be passed to it.
255
    /// type with automatic allocation.
256
    /// The Elevator should have standard constructor interface to be
257
    /// able to automatically created by the algorithm (i.e. the
258
    /// digraph and the maximum level should be passed to it).
259
    /// However an external elevator object could also be passed to the
260
    /// algorithm with the \ref elevator(Elevator&) "elevator()" function
261
    /// before calling \ref run() or \ref init().
262
    /// \sa SetElevator
251 263
    template <typename _Elevator>
... ...
@@ -275,3 +287,3 @@
275 287
    Preflow(const Digraph& digraph, const CapacityMap& capacity,
276
               Node source, Node target)
288
            Node source, Node target)
277 289
      : _graph(digraph), _capacity(&capacity),
... ...
@@ -282,3 +294,3 @@
282 294

	
283
    /// \brief Destrcutor.
295
    /// \brief Destructor.
284 296
    ///
... ...
@@ -292,3 +304,3 @@
292 304
    /// Sets the capacity map.
293
    /// \return \c (*this)
305
    /// \return <tt>(*this)</tt>
294 306
    Preflow& capacityMap(const CapacityMap& map) {
... ...
@@ -301,3 +313,7 @@
301 313
    /// Sets the flow map.
302
    /// \return \c (*this)
314
    /// If you don't use this function before calling \ref run() or
315
    /// \ref init(), an instance will be allocated automatically.
316
    /// The destructor deallocates this automatically allocated map,
317
    /// of course.
318
    /// \return <tt>(*this)</tt>
303 319
    Preflow& flowMap(FlowMap& map) {
... ...
@@ -311,13 +327,28 @@
311 327

	
312
    /// \brief Returns the flow map.
328
    /// \brief Sets the source node.
313 329
    ///
314
    /// \return The flow map.
315
    const FlowMap& flowMap() {
316
      return *_flow;
330
    /// Sets the source node.
331
    /// \return <tt>(*this)</tt>
332
    Preflow& source(const Node& node) {
333
      _source = node;
334
      return *this;
317 335
    }
318 336

	
319
    /// \brief Sets the elevator.
337
    /// \brief Sets the target node.
320 338
    ///
321
    /// Sets the elevator.
322
    /// \return \c (*this)
339
    /// Sets the target node.
340
    /// \return <tt>(*this)</tt>
341
    Preflow& target(const Node& node) {
342
      _target = node;
343
      return *this;
344
    }
345

	
346
    /// \brief Sets the elevator used by algorithm.
347
    ///
348
    /// Sets the elevator used by algorithm.
349
    /// If you don't use this function before calling \ref run() or
350
    /// \ref init(), an instance will be allocated automatically.
351
    /// The destructor deallocates this automatically allocated elevator,
352
    /// of course.
353
    /// \return <tt>(*this)</tt>
323 354
    Preflow& elevator(Elevator& elevator) {
... ...
@@ -331,5 +362,8 @@
331 362

	
332
    /// \brief Returns the elevator.
363
    /// \brief Returns a const reference to the elevator.
333 364
    ///
334
    /// \return The elevator.
365
    /// Returns a const reference to the elevator.
366
    ///
367
    /// \pre Either \ref run() or \ref init() must be called before
368
    /// using this function.
335 369
    const Elevator& elevator() {
... ...
@@ -338,20 +372,2 @@
338 372

	
339
    /// \brief Sets the source node.
340
    ///
341
    /// Sets the source node.
342
    /// \return \c (*this)
343
    Preflow& source(const Node& node) {
344
      _source = node;
345
      return *this;
346
    }
347

	
348
    /// \brief Sets the target node.
349
    ///
350
    /// Sets the target node.
351
    /// \return \c (*this)
352
    Preflow& target(const Node& node) {
353
      _target = node;
354
      return *this;
355
    }
356

	
357 373
    /// \brief Sets the tolerance used by algorithm.
... ...
@@ -364,5 +380,5 @@
364 380

	
365
    /// \brief Returns the tolerance used by algorithm.
381
    /// \brief Returns a const reference to the tolerance.
366 382
    ///
367
    /// Returns the tolerance used by algorithm.
383
    /// Returns a const reference to the tolerance.
368 384
    const Tolerance& tolerance() const {
... ...
@@ -371,9 +387,8 @@
371 387

	
372
    /// \name Execution control The simplest way to execute the
373
    /// algorithm is to use one of the member functions called \c
374
    /// run().
375
    /// \n
376
    /// If you need more control on initial solution or
377
    /// execution then you have to call one \ref init() function and then
378
    /// the startFirstPhase() and if you need the startSecondPhase().
388
    /// \name Execution Control
389
    /// The simplest way to execute the preflow algorithm is to use
390
    /// \ref run() or \ref runMinCut().\n
391
    /// If you need more control on the initial solution or the execution,
392
    /// first you have to call one of the \ref init() functions, then
393
    /// \ref startFirstPhase() and if you need it \ref startSecondPhase().
379 394

	
... ...
@@ -383,4 +398,4 @@
383 398
    ///
384
    /// Initializes the internal data structures.
385
    ///
399
    /// Initializes the internal data structures and sets the initial
400
    /// flow to zero on each arc.
386 401
    void init() {
... ...
@@ -438,3 +453,4 @@
438 453

	
439
    /// \brief Initializes the internal data structures.
454
    /// \brief Initializes the internal data structures using the
455
    /// given flow map.
440 456
    ///
... ...
@@ -442,6 +458,6 @@
442 458
    /// flow to the given \c flowMap. The \c flowMap should contain a
443
    /// flow or at least a preflow, ie. in each node excluding the
444
    /// target the incoming flow should greater or equal to the
459
    /// flow or at least a preflow, i.e. at each node excluding the
460
    /// source node the incoming flow should greater or equal to the
445 461
    /// outgoing flow.
446
    /// \return %False when the given \c flowMap is not a preflow.
462
    /// \return \c false if the given \c flowMap is not a preflow.
447 463
    template <typename FlowMap>
... ...
@@ -538,3 +554,4 @@
538 554
    /// minCut() returns a minimum cut.
539
    /// \pre One of the \ref init() functions should be called.
555
    /// \pre One of the \ref init() functions must be called before
556
    /// using this function.
540 557
    void startFirstPhase() {
... ...
@@ -704,8 +721,8 @@
704 721
    /// The preflow algorithm consists of two phases, this method runs
705
    /// the second phase. After calling \ref init() and \ref
706
    /// startFirstPhase() and then \ref startSecondPhase(), \ref
707
    /// flowMap() return a maximum flow, \ref flowValue() returns the
722
    /// the second phase. After calling one of the \ref init() functions
723
    /// and \ref startFirstPhase() and then \ref startSecondPhase(),
724
    /// \ref flowMap() returns a maximum flow, \ref flowValue() returns the
708 725
    /// value of a maximum flow, \ref minCut() returns a minimum cut
709
    /// \pre The \ref init() and startFirstPhase() functions should be
710
    /// called before.
726
    /// \pre One of the \ref init() functions and \ref startFirstPhase()
727
    /// must be called before using this function.
711 728
    void startSecondPhase() {
... ...
@@ -865,6 +882,7 @@
865 882
    /// \name Query Functions
866
    /// The result of the %Preflow algorithm can be obtained using these
883
    /// The results of the preflow algorithm can be obtained using these
867 884
    /// functions.\n
868
    /// Before the use of these functions,
869
    /// either run() or start() must be called.
885
    /// Either one of the \ref run() "run*()" functions or one of the
886
    /// \ref startFirstPhase() "start*()" functions should be called
887
    /// before using them.
870 888

	
... ...
@@ -875,4 +893,7 @@
875 893
    /// Returns the value of the maximum flow by returning the excess
876
    /// of the target node \c t. This value equals to the value of
877
    /// the maximum flow already after the first phase.
894
    /// of the target node. This value equals to the value of
895
    /// the maximum flow already after the first phase of the algorithm.
896
    ///
897
    /// \pre Either \ref run() or \ref init() must be called before
898
    /// using this function.
878 899
    Value flowValue() const {
... ...
@@ -881,7 +902,33 @@
881 902

	
882
    /// \brief Returns true when the node is on the source side of minimum cut.
903
    /// \brief Returns the flow on the given arc.
883 904
    ///
884
    /// Returns true when the node is on the source side of minimum
885
    /// cut. This method can be called both after running \ref
905
    /// Returns the flow on the given arc. This method can
906
    /// be called after the second phase of the algorithm.
907
    ///
908
    /// \pre Either \ref run() or \ref init() must be called before
909
    /// using this function.
910
    Value flow(const Arc& arc) const {
911
      return (*_flow)[arc];
912
    }
913

	
914
    /// \brief Returns a const reference to the flow map.
915
    ///
916
    /// Returns a const reference to the arc map storing the found flow.
917
    /// This method can be called after the second phase of the algorithm.
918
    ///
919
    /// \pre Either \ref run() or \ref init() must be called before
920
    /// using this function.
921
    const FlowMap& flowMap() {
922
      return *_flow;
923
    }
924

	
925
    /// \brief Returns \c true when the node is on the source side of the
926
    /// minimum cut.
927
    ///
928
    /// Returns true when the node is on the source side of the found
929
    /// minimum cut. This method can be called both after running \ref
886 930
    /// startFirstPhase() and \ref startSecondPhase().
931
    ///
932
    /// \pre Either \ref run() or \ref init() must be called before
933
    /// using this function.
887 934
    bool minCut(const Node& node) const {
... ...
@@ -890,9 +937,17 @@
890 937

	
891
    /// \brief Returns a minimum value cut.
938
    /// \brief Gives back a minimum value cut.
892 939
    ///
893
    /// Sets the \c cutMap to the characteristic vector of a minimum value
894
    /// cut. This method can be called both after running \ref
895
    /// startFirstPhase() and \ref startSecondPhase(). The result after second
896
    /// phase could be changed slightly if inexact computation is used.
897
    /// \pre The \c cutMap should be a bool-valued node-map.
940
    /// Sets \c cutMap to the characteristic vector of a minimum value
941
    /// cut. \c cutMap should be a \ref concepts::WriteMap "writable"
942
    /// node map with \c bool (or convertible) value type.
943
    ///
944
    /// This method can be called both after running \ref startFirstPhase()
945
    /// and \ref startSecondPhase(). The result after the second phase
946
    /// could be slightly different if inexact computation is used.
947
    ///
948
    /// \note This function calls \ref minCut() for each node, so it runs in
949
    /// \f$O(n)\f$ time.
950
    ///
951
    /// \pre Either \ref run() or \ref init() must be called before
952
    /// using this function.
898 953
    template <typename CutMap>
... ...
@@ -904,10 +959,2 @@
904 959

	
905
    /// \brief Returns the flow on the arc.
906
    ///
907
    /// Sets the \c flowMap to the flow on the arcs. This method can
908
    /// be called after the second phase of algorithm.
909
    Value flow(const Arc& arc) const {
910
      return (*_flow)[arc];
911
    }
912

	
913 960
    /// @}
0 comments (0 inline)