diff -r 3b53491bf643 -r fe80a8145653 lemon/network_simplex.h --- a/lemon/network_simplex.h Thu Nov 12 23:34:35 2009 +0100 +++ b/lemon/network_simplex.h Thu Nov 12 23:45:15 2009 +0100 @@ -164,7 +164,7 @@ TEMPLATE_DIGRAPH_TYPEDEFS(GR); typedef std::vector IntVector; - typedef std::vector BoolVector; + typedef std::vector CharVector; typedef std::vector ValueVector; typedef std::vector CostVector; @@ -212,8 +212,8 @@ IntVector _succ_num; IntVector _last_succ; IntVector _dirty_revs; - BoolVector _forward; - IntVector _state; + CharVector _forward; + CharVector _state; int _root; // Temporary data used in the current pivot iteration @@ -221,6 +221,8 @@ int first, second, right, last; int stem, par_stem, new_stem; Value delta; + + const Value MAX; public: @@ -242,7 +244,7 @@ const IntVector &_source; const IntVector &_target; const CostVector &_cost; - const IntVector &_state; + const CharVector &_state; const CostVector &_pi; int &_in_arc; int _search_arc_num; @@ -294,7 +296,7 @@ const IntVector &_source; const IntVector &_target; const CostVector &_cost; - const IntVector &_state; + const CharVector &_state; const CostVector &_pi; int &_in_arc; int _search_arc_num; @@ -333,7 +335,7 @@ const IntVector &_source; const IntVector &_target; const CostVector &_cost; - const IntVector &_state; + const CharVector &_state; const CostVector &_pi; int &_in_arc; int _search_arc_num; @@ -406,7 +408,7 @@ const IntVector &_source; const IntVector &_target; const CostVector &_cost; - const IntVector &_state; + const CharVector &_state; const CostVector &_pi; int &_in_arc; int _search_arc_num; @@ -509,7 +511,7 @@ const IntVector &_source; const IntVector &_target; const CostVector &_cost; - const IntVector &_state; + const CharVector &_state; const CostVector &_pi; int &_in_arc; int _search_arc_num; @@ -631,9 +633,9 @@ /// but it is usually slower. Therefore it is disabled by default. NetworkSimplex(const GR& graph, bool arc_mixing = false) : _graph(graph), _node_id(graph), _arc_id(graph), + MAX(std::numeric_limits::max()), INF(std::numeric_limits::has_infinity ? - std::numeric_limits::infinity() : - std::numeric_limits::max()) + std::numeric_limits::infinity() : MAX) { // Check the value types LEMON_ASSERT(std::numeric_limits::is_signed, @@ -1020,9 +1022,9 @@ for (int i = 0; i != _arc_num; ++i) { Value c = _lower[i]; if (c >= 0) { - _cap[i] = _upper[i] < INF ? _upper[i] - c : INF; + _cap[i] = _upper[i] < MAX ? _upper[i] - c : INF; } else { - _cap[i] = _upper[i] < INF + c ? _upper[i] - c : INF; + _cap[i] = _upper[i] < MAX + c ? _upper[i] - c : INF; } _supply[_source[i]] -= c; _supply[_target[i]] += c; @@ -1214,7 +1216,7 @@ for (int u = first; u != join; u = _parent[u]) { e = _pred[u]; d = _forward[u] ? - _flow[e] : (_cap[e] == INF ? INF : _cap[e] - _flow[e]); + _flow[e] : (_cap[e] >= MAX ? INF : _cap[e] - _flow[e]); if (d < delta) { delta = d; u_out = u; @@ -1225,7 +1227,7 @@ for (int u = second; u != join; u = _parent[u]) { e = _pred[u]; d = _forward[u] ? - (_cap[e] == INF ? INF : _cap[e] - _flow[e]) : _flow[e]; + (_cap[e] >= MAX ? INF : _cap[e] - _flow[e]) : _flow[e]; if (d <= delta) { delta = d; u_out = u; @@ -1424,7 +1426,7 @@ while (pivot.findEnteringArc()) { findJoinNode(); bool change = findLeavingArc(); - if (delta >= INF) return UNBOUNDED; + if (delta >= MAX) return UNBOUNDED; changeFlow(change); if (change) { updateTreeStructure();