# HG changeset patch
# User Peter Kovacs <kpeter@inf.elte.hu>
# Date 1246462102 7200
# Node ID 0a0cbbf56e23a7cc36f5ee3bfd572c61a408d7f7
# Parent cab85bd7859b6b89eee29e8db1619888a513e6a6
Add a parameter to control arc mixing in NS (#298)
diff git a/lemon/network_simplex.h b/lemon/network_simplex.h
a

b


625  625  /// The constructor of the class. 
626  626  /// 
627  627  /// \param graph The digraph the algorithm runs on. 
628   NetworkSimplex(const GR& graph) : 
 628  /// \param arc_mixing Indicate if the arcs have to be stored in a 
 629  /// mixed order in the internal data structure. 
 630  /// In special cases, it could lead to better overall performance, 
 631  /// but it is usually slower. Therefore it is disabled by default. 
 632  NetworkSimplex(const GR& graph, bool arc_mixing = false) : 
629  633  _graph(graph), _node_id(graph), _arc_id(graph), 
630  634  INF(std::numeric_limits<Value>::has_infinity ? 
631  635  std::numeric_limits<Value>::infinity() : 
… 
… 

663  667  _last_succ.resize(all_node_num); 
664  668  _state.resize(max_arc_num); 
665  669  
666   // Copy the graph (store the arcs in a mixed order) 
 670  // Copy the graph 
667  671  int i = 0; 
668  672  for (NodeIt n(_graph); n != INVALID; ++n, ++i) { 
669  673  _node_id[n] = i; 
670  674  } 
671   int k = std::max(int(std::sqrt(double(_arc_num))), 10); 
672   i = 0; 
673   for (ArcIt a(_graph); a != INVALID; ++a) { 
674   _arc_id[a] = i; 
675   _source[i] = _node_id[_graph.source(a)]; 
676   _target[i] = _node_id[_graph.target(a)]; 
677   if ((i += k) >= _arc_num) i = (i % k) + 1; 
 675  if (arc_mixing) { 
 676  // Store the arcs in a mixed order 
 677  int k = std::max(int(std::sqrt(double(_arc_num))), 10); 
 678  int i = 0; 
 679  for (ArcIt a(_graph); a != INVALID; ++a) { 
 680  _arc_id[a] = i; 
 681  _source[i] = _node_id[_graph.source(a)]; 
 682  _target[i] = _node_id[_graph.target(a)]; 
 683  if ((i += k) >= _arc_num) i = (i % k) + 1; 
 684  } 
 685  } else { 
 686  // Store the arcs in the original order 
 687  int i = 0; 
 688  for (ArcIt a(_graph); a != INVALID; ++a, ++i) { 
 689  _arc_id[a] = i; 
 690  _source[i] = _node_id[_graph.source(a)]; 
 691  _target[i] = _node_id[_graph.target(a)]; 
 692  } 
678  693  } 
679  694  
680  695  // Initialize maps 