This class implements Karp's algorithm for finding a directed cycle of minimum mean cost in a digraph [21], [9]. It runs in time O(nm) and uses space O(n2+m).
| GR | The type of the digraph the algorithm runs on. | 
| CM | The type of the cost map. The default map type is GR::ArcMap<int>. | 
| TR | The traits class that defines various types used by the algorithm. By default, it is KarpMmcDefaultTraits<GR, CM>. In most cases, this parameter should not be set directly, consider to use the named template parameters instead. | 
#include <lemon/karp_mmc.h>
| Classes | |
| struct | SetLargeCost | 
| Named parameter for setting LargeCosttype.  More... | |
| struct | SetPath | 
| Named parameter for setting Pathtype.  More... | |
| Public Types | |
| typedef TR::Digraph | Digraph | 
| The type of the digraph. | |
| typedef TR::CostMap | CostMap | 
| The type of the cost map. | |
| typedef TR::Cost | Cost | 
| The type of the arc costs. | |
| typedef TR::LargeCost | LargeCost | 
| The large cost type.  More... | |
| typedef TR::Tolerance | Tolerance | 
| The tolerance type. | |
| typedef TR::Path | Path | 
| The path type of the found cycles.  More... | |
| typedef TR | Traits | 
| The traits class of the algorithm. | |
| Public Member Functions | |
| KarpMmc (const Digraph &digraph, const CostMap &cost) | |
| Constructor.  More... | |
| ~KarpMmc () | |
| Destructor. | |
| KarpMmc & | cycle (Path &path) | 
| Set the path structure for storing the found cycle.  More... | |
| KarpMmc & | tolerance (const Tolerance &tolerance) | 
| Set the tolerance used by the algorithm.  More... | |
| const Tolerance & | tolerance () const | 
| Return a const reference to the tolerance.  More... | |
| Execution control | |
| The simplest way to execute the algorithm is to call the run() function. | |
| bool | run () | 
| Run the algorithm.  More... | |
| bool | findCycleMean () | 
| Find the minimum cycle mean.  More... | |
| bool | findCycle () | 
| Find a minimum mean directed cycle.  More... | |
| Query Functions | |
| The results of the algorithm can be obtained using these functions. | |
| Cost | cycleCost () const | 
| Return the total cost of the found cycle.  More... | |
| int | cycleSize () const | 
| Return the number of arcs on the found cycle.  More... | |
| double | cycleMean () const | 
| Return the mean cost of the found cycle.  More... | |
| const Path & | cycle () const | 
| Return the found cycle.  More... | |
| typedef TR::LargeCost LargeCost | 
The large cost type used for internal computations. By default, it is long long if the Cost type is integer, otherwise it is double. 
| typedef TR::Path Path | 
The path type of the found cycles. Using the default traits class, it is Path<Digraph>.
The constructor of the class.
| digraph | The digraph the algorithm runs on. | 
| cost | The costs of the arcs. | 
This function sets an external path structure for storing the found cycle.
If you don't call this function before calling run() or findCycleMean(), a local path structure will be allocated. The destuctor deallocates this automatically allocated object, of course.
(*this) This function sets the tolerance object used by the algorithm.
(*this) | 
 | inline | 
This function returns a const reference to the tolerance object used by the algorithm.
| 
 | inline | 
This function runs the algorithm. It can be called more than once (e.g. if the underlying digraph and/or the arc costs have been modified).
true if a directed cycle exists in the digraph.mmc.run() is just a shortcut of the following code. | 
 | inline | 
This function finds the minimum mean cost of the directed cycles in the digraph.
true if a directed cycle exists in the digraph. | 
 | inline | 
This function finds a directed cycle of minimum mean cost in the digraph using the data computed by findCycleMean().
true if a directed cycle exists in the digraph.| 
 | inline | 
This function returns the total cost of the found cycle.
| 
 | inline | 
This function returns the number of arcs on the found cycle.
| 
 | inline | 
This function returns the mean cost of the found cycle.
alg.cycleMean() is just a shortcut of the following code. | 
 | inline | 
This function returns a const reference to the path structure storing the found cycle.
 1.8.5
 1.8.5