diff -r 2570784896d8 -r 3577b3db6089 src/hugo/minlengthpaths.h --- a/src/hugo/minlengthpaths.h Wed Sep 15 14:38:13 2004 +0000 +++ b/src/hugo/minlengthpaths.h Thu Sep 16 10:26:14 2004 +0000 @@ -7,8 +7,6 @@ ///\brief An algorithm for finding k paths of minimal total length. -//#include -//#include #include #include #include @@ -18,16 +16,18 @@ /// \addtogroup flowalgs /// @{ - ///\brief Implementation of an algorithm for finding k paths between 2 nodes + ///\brief Implementation of an algorithm for finding k edge-disjoint paths between 2 nodes /// of minimal total length /// - /// The class \ref hugo::MinLengthPaths "MinLengthPaths" implements + /// The class \ref hugo::MinLengthPaths implements /// an algorithm for finding k edge-disjoint paths /// from a given source node to a given target node in an - /// edge-weighted directed graph having minimal total weigth (length). + /// edge-weighted directed graph having minimal total weight (length). /// - ///\warning It is assumed that the lengths are positive, since the - /// general flow-decomposition is not implemented yet. + ///\warning Length values should be nonnegative. + /// + ///\param Graph The directed graph type the algorithm runs on. + ///\param LengthMap The type of the length map (values should be nonnegative). /// ///\author Attila Bernath template @@ -59,6 +59,10 @@ public : + /// The constructor of the class. + + ///\param _G The directed graph the algorithm runs on. + ///\param _length The length (weight or cost) of the edges. MinLengthPaths(Graph& _G, LengthMap& _length) : G(_G), const1map(1), mincost_flow(_G, _length, const1map){} @@ -67,11 +71,15 @@ ///Runs the algorithm. ///Returns k if there are at least k edge-disjoint paths from s to t. ///Otherwise it returns the number of found edge-disjoint paths from s to t. + /// + ///\param s The source node. + ///\param t The target node. + ///\param k How many paths are we looking for? + /// int run(Node s, Node t, int k) { int i = mincost_flow.run(s,t,k); - - + //Let's find the paths //We put the paths into stl vectors (as an inner representation). @@ -111,7 +119,7 @@ } - ///Total length of the paths + ///Returns the total length of the paths ///This function gives back the total length of the found paths. ///\pre \ref run() must @@ -120,14 +128,14 @@ return mincost_flow.totalLength(); } - ///Return the found flow. + ///Returns the found flow. ///This function returns a const reference to the EdgeMap \c flow. ///\pre \ref run() must ///be called before using this function. const EdgeIntMap &getFlow() const { return mincost_flow.flow;} - /// Return the optimal dual solution + /// Returns the optimal dual solution ///This function returns a const reference to the NodeMap ///\c potential (the dual solution). @@ -136,12 +144,12 @@ ///Checks whether the complementary slackness holds. - ///This function checks, whether the given solution is optimal - ///Running after a \c run() should return with true + ///This function checks, whether the given solution is optimal. + ///It should return true after calling \ref run() ///Currently this function only checks optimality, ///doesn't bother with feasibility + ///It is meant for testing purposes. /// - ///\todo Is this OK here? bool checkComplementarySlackness(){ return mincost_flow.checkComplementarySlackness(); } @@ -154,9 +162,13 @@ ///be a path of graph \c G. ///If \c j is not less than the result of previous \c run, ///then the result here will be an empty path (\c j can be 0 as well). + /// + ///\param Path The type of the path structure to put the result to (must meet hugo path concept). + ///\param p The path to put the result to + ///\param j Which path you want to get from the found paths (in a real application you would get the found paths iteratively) template void getPath(Path& p, size_t j){ - + p.clear(); if (j>paths.size()-1){ return;