Ticket #360: 360-34380851fc86.patch
File 360-34380851fc86.patch, 4.0 KB (added by , 15 years ago) |
---|
-
lemon/bellman_ford.h
# HG changeset patch # User Peter Kovacs <kpeter@inf.elte.hu> # Date 1268870913 -3600 # Node ID 34380851fc86c9d55e0b7a7a289501b5ef00f745 # Parent 141f9c0db4a3892de5feca4ebdbc8776191567cd Undo the changes of [a6eb9698c321] (#360, #51) The introduced solution for using tolerance technique in BellmanFord class turned out to be invalid, since it cannot be used for floating point types for which it should be. diff --git a/lemon/bellman_ford.h b/lemon/bellman_ford.h
a b 28 28 #include <lemon/core.h> 29 29 #include <lemon/error.h> 30 30 #include <lemon/maps.h> 31 #include <lemon/tolerance.h>32 31 #include <lemon/path.h> 33 32 34 33 #include <limits> … … 42 41 /// The default implementation is based on the \c numeric_limits class. 43 42 /// If the numeric type does not have infinity value, then the maximum 44 43 /// value is used as extremal infinity value. 45 ///46 /// \see BellmanFordToleranceOperationTraits47 44 template < 48 45 typename V, 49 46 bool has_inf = std::numeric_limits<V>::has_infinity> … … 87 84 } 88 85 }; 89 86 90 /// \brief Operation traits for the BellmanFord algorithm class91 /// using tolerance.92 ///93 /// This operation traits class defines all computational operations94 /// and constants that are used in the Bellman-Ford algorithm.95 /// The only difference between this implementation and96 /// \ref BellmanFordDefaultOperationTraits is that this class uses97 /// the \ref Tolerance "tolerance technique" in its \ref less()98 /// function.99 ///100 /// \tparam V The value type.101 /// \tparam eps The epsilon value for the \ref less() function.102 /// By default, it is the epsilon value used by \ref Tolerance103 /// "Tolerance<V>".104 ///105 /// \see BellmanFordDefaultOperationTraits106 #ifdef DOXYGEN107 template <typename V, V eps>108 #else109 template <110 typename V,111 V eps = Tolerance<V>::def_epsilon>112 #endif113 struct BellmanFordToleranceOperationTraits {114 /// \brief Value type for the algorithm.115 typedef V Value;116 /// \brief Gives back the zero value of the type.117 static Value zero() {118 return static_cast<Value>(0);119 }120 /// \brief Gives back the positive infinity value of the type.121 static Value infinity() {122 return std::numeric_limits<Value>::infinity();123 }124 /// \brief Gives back the sum of the given two elements.125 static Value plus(const Value& left, const Value& right) {126 return left + right;127 }128 /// \brief Gives back \c true only if the first value is less than129 /// the second.130 static bool less(const Value& left, const Value& right) {131 return left + eps < right;132 }133 };134 135 87 /// \brief Default traits class of BellmanFord class. 136 88 /// 137 89 /// Default traits class of BellmanFord class. … … 155 107 /// 156 108 /// It defines the used operations and the infinity value for the 157 109 /// given \c Value type. 158 /// \see BellmanFordDefaultOperationTraits, 159 /// BellmanFordToleranceOperationTraits 110 /// \see BellmanFordDefaultOperationTraits 160 111 typedef BellmanFordDefaultOperationTraits<Value> OperationTraits; 161 112 162 113 /// \brief The type of the map that stores the last arcs of the … … 886 837 /// 887 838 /// It defines the used operations and the infinity value for the 888 839 /// given \c Value type. 889 /// \see BellmanFordDefaultOperationTraits, 890 /// BellmanFordToleranceOperationTraits 840 /// \see BellmanFordDefaultOperationTraits 891 841 typedef BellmanFordDefaultOperationTraits<Value> OperationTraits; 892 842 893 843 /// \brief The type of the map that stores the last -
test/bellman_ford_test.cc
diff --git a/test/bellman_ford_test.cc b/test/bellman_ford_test.cc
a b 104 104 BF::SetPredMap<concepts::ReadWriteMap<Node,Arc> > 105 105 ::SetDistMap<concepts::ReadWriteMap<Node,Value> > 106 106 ::SetOperationTraits<BellmanFordDefaultOperationTraits<Value> > 107 ::SetOperationTraits<BellmanFordToleranceOperationTraits<Value, 0> >108 107 ::Create bf_test(gr,length); 109 108 110 109 LengthMap length_map;