Changeset 1723:fb4f801dd692 in lemon-0.x
- Timestamp:
- 10/14/05 12:53:51 (19 years ago)
- Branch:
- default
- Phase:
- public
- Convert:
- svn:c9d7d8f5-90d6-0310-b91f-818b3a526b0e/lemon/trunk@2250
- Location:
- lemon
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
lemon/belmann_ford.h
r1710 r1723 145 145 /// 146 146 /// \ingroup flowalgs 147 /// This class provides an efficient implementation of \c Belmann Ford147 /// This class provides an efficient implementation of \c Belmann-Ford 148 148 /// algorithm. The edge lengths are passed to the algorithm using a 149 149 /// \ref concept::ReadMap "ReadMap", so it is easy to change it to any 150 150 /// kind of length. 151 /// 152 /// The Belmann-Ford algorithm solves the shortest path from one node 153 /// problem when the edges can have negative length but the graph should 154 /// not contain circle with negative sum of length. If we can assume 155 /// that all edge is non-negative in the graph then the dijkstra algorithm 156 /// should be used rather. 157 /// 158 /// The complexity of the algorithm is O(n * e). 151 159 /// 152 160 /// The type of the length is determined by the … … 403 411 /// - The distance of each node from the root(s). 404 412 void start() { 405 bool ready = false;406 while (!ready) {407 ready = true;413 int num = countNodes(*graph) - 1; 414 for (int i = 0; i < num; ++i) { 415 bool ready = true; 408 416 for (EdgeIt it(*graph); it != INVALID; ++it) { 409 417 Node source = graph->source(it); … … 417 425 } 418 426 } 419 } 427 if (ready) return; 428 } 429 } 430 431 /// \brief Executes the algorithm and check the negative circles. 432 /// 433 /// \pre init() must be called and at least one node should be added 434 /// with addSource() before using this function. If there is 435 /// a negative circle in the graph it gives back false. 436 /// 437 /// This method runs the %BelmannFord algorithm from the root node(s) 438 /// in order to compute the shortest path to each node. The algorithm 439 /// computes 440 /// - The shortest path tree. 441 /// - The distance of each node from the root(s). 442 bool checkedStart() { 443 int num = countNodes(*graph); 444 for (int i = 0; i < num; ++i) { 445 bool ready = true; 446 for (EdgeIt it(*graph); it != INVALID; ++it) { 447 Node source = graph->source(it); 448 Node target = graph->target(it); 449 Value relaxed = 450 OperationTraits::plus((*_dist)[source], (*length)[it]); 451 if (OperationTraits::less(relaxed, (*_dist)[target])) { 452 _pred->set(target, it); 453 _dist->set(target, relaxed); 454 ready = false; 455 } 456 } 457 if (ready) return true; 458 } 459 return false; 420 460 } 421 461 -
lemon/floyd_warshall.h
r1710 r1723 28 28 #include <lemon/invalid.h> 29 29 #include <lemon/error.h> 30 #include <lemon/matrix_maps.h> 30 31 #include <lemon/maps.h> 31 32 … … 106 107 typedef FloydWarshallDefaultOperationTraits<Value> OperationTraits; 107 108 108 /// \brief The type of the ma p that stores the last edges of the109 /// \brief The type of the matrix map that stores the last edges of the 109 110 /// shortest paths. 110 111 /// 111 /// The type of the map that stores the last 112 /// edges of the shortest paths. 112 /// The type of the map that stores the last edges of the shortest paths. 113 113 /// It must be a matrix map with \c Graph::Edge value type. 114 114 /// 115 typedef NodeMatrixMap<Graph, typename Graph::Edge> PredMap; 115 typedef DynamicMatrixMap<Graph, typename Graph::Node, 116 typename Graph::Edge> PredMap; 116 117 117 118 /// \brief Instantiates a PredMap. … … 127 128 /// 128 129 /// The type of the map that stores the dists of the nodes. 129 /// It must meet the \ref concept::WriteMa p "WriteMap" concept.130 /// 131 typedef NodeMatrixMap<Graph, Value> DistMap;130 /// It must meet the \ref concept::WriteMatrixMap "WriteMatrixMap" concept. 131 /// 132 typedef DynamicMatrixMap<Graph, typename Graph::Node, Value> DistMap; 132 133 133 134 /// \brief Instantiates a DistMap. … … 149 150 /// \ref concept::ReadMap "ReadMap", so it is easy to change it to any 150 151 /// kind of length. 152 /// 153 /// The algorithm solves the shortest path problem for each pairs 154 /// of node when the edges can have negative length but the graph should 155 /// not contain circle with negative sum of length. If we can assume 156 /// that all edge is non-negative in the graph then the dijkstra algorithm 157 /// should be used from each node rather and if the graph is sparse and 158 /// there are negative circles then the johson algorithm. 159 /// 160 /// The complexity of this algorithm is O(n^3 + e). 151 161 /// 152 162 /// The type of the length is determined by the -
lemon/johnson.h
r1710 r1723 30 30 #include <lemon/error.h> 31 31 #include <lemon/maps.h> 32 #include <lemon/matrix_maps.h> 32 33 33 34 #include <limits> … … 107 108 typedef JohnsonDefaultOperationTraits<Value> OperationTraits; 108 109 109 /// \brief The type of the ma p that stores the last edges of the110 /// \brief The type of the matrix map that stores the last edges of the 110 111 /// shortest paths. 111 112 /// 112 /// The type of the map that stores the last 113 /// edges of the shortest paths. 113 /// The type of the map that stores the last edges of the shortest paths. 114 114 /// It must be a matrix map with \c Graph::Edge value type. 115 115 /// 116 typedef NodeMatrixMap<Graph, typename Graph::Edge> PredMap; 116 typedef DynamicMatrixMap<Graph, typename Graph::Node, 117 typename Graph::Edge> PredMap; 117 118 118 119 /// \brief Instantiates a PredMap. … … 125 126 } 126 127 127 /// \brief The type of the ma p that stores the dists of the nodes.128 /// 129 /// The type of the ma p that stores the dists of the nodes.130 /// It must meet the \ref concept::WriteMa p "WriteMap" concept.131 /// 132 typedef NodeMatrixMap<Graph, Value> DistMap;133 128 /// \brief The type of the matrix map that stores the dists of the nodes. 129 /// 130 /// The type of the matrix map that stores the dists of the nodes. 131 /// It must meet the \ref concept::WriteMatrixMap "WriteMatrixMap" concept. 132 /// 133 typedef DynamicMatrixMap<Graph, typename Graph::Node, Value> DistMap; 134 134 135 /// \brief Instantiates a DistMap. 135 136 /// … … 150 151 /// \ref concept::ReadMap "ReadMap", so it is easy to change it to any 151 152 /// kind of length. 153 /// 154 /// The algorithm solves the shortest path problem for each pairs 155 /// of node when the edges can have negative length but the graph should 156 /// not contain circle with negative sum of length. If we can assume 157 /// that all edge is non-negative in the graph then the dijkstra algorithm 158 /// should be used from each node. 159 /// 160 /// The complexity of this algorithm is $O(n^2 * log(n) + n * log(n) * e)$ or 161 /// with fibonacci heap O(n^2 * log(n) + n * e). 152 162 /// 153 163 /// The type of the length is determined by the
Note: See TracChangeset
for help on using the changeset viewer.