[Lemon-commits] [lemon_svn] alpar: r1642 - in hugo/trunk/src: lemon test

Lemon SVN svn at lemon.cs.elte.hu
Mon Nov 6 20:46:45 CET 2006


Author: alpar
Date: Thu Mar 17 11:43:57 2005
New Revision: 1642

Modified:
   hugo/trunk/src/lemon/preflow.h
   hugo/trunk/src/test/preflow_test.cc

Log:
The first step toward function type interface to Preflow alg:
- Naming changed to be closer in style to the BFD/DFS/Dijkstra triplet.

Modified: hugo/trunk/src/lemon/preflow.h
==============================================================================
--- hugo/trunk/src/lemon/preflow.h	(original)
+++ hugo/trunk/src/lemon/preflow.h	Thu Mar 17 11:43:57 2005
@@ -37,12 +37,12 @@
 
   ///This class provides an implementation of the \e preflow \e
   ///algorithm producing a flow of maximum value in a directed
-  ///graph. The preflow algorithms are the fastest max flow algorithms
+  ///graph. The preflow algorithms are the fastest known max flow algorithms
   ///up to now. The \e source node, the \e target node, the \e
   ///capacity of the edges and the \e starting \e flow value of the
   ///edges should be passed to the algorithm through the
   ///constructor. It is possible to change these quantities using the
-  ///functions \ref setSource, \ref setTarget, \ref setCap and \ref
+  ///functions \ref source, \ref target, \ref setCap and \ref
   ///setFlow.
   ///
   ///After running \ref lemon::Preflow::phase1() "phase1()"
@@ -55,12 +55,12 @@
   ///
   ///\param Graph The directed graph type the algorithm runs on.
   ///\param Num The number type of the capacities and the flow values.
-  ///\param CapMap The capacity map type.
+  ///\param CapacityMap The capacity map type.
   ///\param FlowMap The flow map type.
   ///
   ///\author Jacint Szabo 
   template <typename Graph, typename Num,
-	    typename CapMap=typename Graph::template EdgeMap<Num>,
+	    typename CapacityMap=typename Graph::template EdgeMap<Num>,
             typename FlowMap=typename Graph::template EdgeMap<Num> >
   class Preflow {
   protected:
@@ -73,12 +73,12 @@
     typedef typename Graph::template NodeMap<Node> NNMap;
     typedef typename std::vector<Node> VecNode;
 
-    const Graph* g;
-    Node s;
-    Node t;
-    const CapMap* capacity;
-    FlowMap* flow;
-    int n;      //the number of nodes of G
+    const Graph* _g;
+    Node _source;
+    Node _target;
+    const CapacityMap* _capacity;
+    FlowMap* _flow;
+    int _node_num;      //the number of nodes of G
     
     typename Graph::template NodeMap<int> level;  
     typename Graph::template NodeMap<Num> excess;
@@ -91,7 +91,8 @@
 
     ///Indicates the property of the starting flow map.
 
-    ///Indicates the property of the starting flow map. The meanings are as follows:
+    ///Indicates the property of the starting flow map.
+    ///The meanings are as follows:
     ///- \c ZERO_FLOW: constant zero flow
     ///- \c GEN_FLOW: any flow, i.e. the sum of the in-flows equals to
     ///the sum of the out-flows in every node except the \e source and
@@ -111,8 +112,10 @@
 
     ///Indicates the state of the preflow algorithm.
 
-    ///Indicates the state of the preflow algorithm. The meanings are as follows:
-    ///- \c AFTER_NOTHING: before running the algorithm or at an unspecified state.
+    ///Indicates the state of the preflow algorithm.
+    ///The meanings are as follows:
+    ///- \c AFTER_NOTHING: before running the algorithm or
+    ///  at an unspecified state.
     ///- \c AFTER_PREFLOW_PHASE_1: right after running \c phase1
     ///- \c AFTER_PREFLOW_PHASE_2: after running \ref phase2()
     ///
@@ -133,15 +136,15 @@
     ///\param _G The directed graph the algorithm runs on. 
     ///\param _s The source node.
     ///\param _t The target node.
-    ///\param _capacity The capacity of the edges. 
-    ///\param _flow The flow of the edges. 
+    ///\param _cap The capacity of the edges. 
+    ///\param _f The flow of the edges. 
     ///Except the graph, all of these parameters can be reset by
-    ///calling \ref setSource, \ref setTarget, \ref setCap and \ref
+    ///calling \ref source, \ref target, \ref setCap and \ref
     ///setFlow, resp.
-      Preflow(const Graph& _G, Node _s, Node _t, 
-	      const CapMap& _capacity, FlowMap& _flow) :
-	g(&_G), s(_s), t(_t), capacity(&_capacity),
-	flow(&_flow), n(countNodes(_G)), level(_G), excess(_G,0), 
+      Preflow(const Graph& _gr, Node _s, Node _t, 
+	      const CapacityMap& _cap, FlowMap& _f) :
+	_g(&_gr), _source(_s), _target(_t), _capacity(&_cap),
+	_flow(&_f), _node_num(countNodes(_gr)), level(_gr), excess(_gr,0), 
 	flow_prop(NO_FLOW), status(AFTER_NOTHING) { }
 
 
@@ -204,8 +207,8 @@
     ///give minimum value cuts unless calling \ref phase2().
     void phase1()
     {
-      int heur0=(int)(H0*n);  //time while running 'bound decrease'
-      int heur1=(int)(H1*n);  //time while running 'highest label'
+      int heur0=(int)(H0*_node_num);  //time while running 'bound decrease'
+      int heur1=(int)(H1*_node_num);  //time while running 'highest label'
       int heur=heur1;         //starting time interval (#of relabels)
       int numrelabel=0;
 
@@ -216,15 +219,15 @@
       //Needed for 'bound decrease', true means no active 
       //nodes are above bound b.
 
-      int k=n-2;  //bound on the highest level under n containing a node
+      int k=_node_num-2;  //bound on the highest level under n containing a node
       int b=k;    //bound on the highest level under n of an active node
 
-      VecNode first(n, INVALID);
-      NNMap next(*g, INVALID);
+      VecNode first(_node_num, INVALID);
+      NNMap next(*_g, INVALID);
 
-      NNMap left(*g, INVALID);
-      NNMap right(*g, INVALID);
-      VecNode level_list(n,INVALID);
+      NNMap left(*_g, INVALID);
+      NNMap right(*_g, INVALID);
+      VecNode level_list(_node_num,INVALID);
       //List of the nodes in level i<n, set to n.
 
       preflowPreproc(first, next, level_list, left, right);
@@ -271,7 +274,8 @@
     //   list 'level_list' on the nodes on level i implemented by hand
     //   stack 'active' on the active nodes on level i      
     //   runs heuristic 'highest label' for H1*n relabels
-    //   runs heuristic 'bound decrease' for H0*n relabels, starts with 'highest label'
+    //   runs heuristic 'bound decrease' for H0*n relabels,
+    //        starts with 'highest label'
     //   Parameters H0 and H1 are initialized to 20 and 1.
 
 
@@ -287,15 +291,15 @@
     void phase2()
     {
 
-      int k=n-2;  //bound on the highest level under n containing a node
+      int k=_node_num-2;  //bound on the highest level under n containing a node
       int b=k;    //bound on the highest level under n of an active node
 
     
-      VecNode first(n, INVALID);
-      NNMap next(*g, INVALID); 
-      level.set(s,0);
+      VecNode first(_node_num, INVALID);
+      NNMap next(*_g, INVALID); 
+      level.set(_source,0);
       std::queue<Node> bfs_queue;
-      bfs_queue.push(s);
+      bfs_queue.push(_source);
 
       while ( !bfs_queue.empty() ) {
 
@@ -303,10 +307,10 @@
 	bfs_queue.pop();
 	int l=level[v]+1;
 
-	for(InEdgeIt e(*g,v); e!=INVALID; ++e) {
-	  if ( (*capacity)[e] <= (*flow)[e] ) continue;
-	  Node u=g->source(e);
-	  if ( level[u] >= n ) {
+	for(InEdgeIt e(*_g,v); e!=INVALID; ++e) {
+	  if ( (*_capacity)[e] <= (*_flow)[e] ) continue;
+	  Node u=_g->source(e);
+	  if ( level[u] >= _node_num ) {
 	    bfs_queue.push(u);
 	    level.set(u, l);
 	    if ( excess[u] > 0 ) {
@@ -316,10 +320,10 @@
 	  }
 	}
 
-	for(OutEdgeIt e(*g,v); e!=INVALID; ++e) {
-	  if ( 0 >= (*flow)[e] ) continue;
-	  Node u=g->target(e);
-	  if ( level[u] >= n ) {
+	for(OutEdgeIt e(*_g,v); e!=INVALID; ++e) {
+	  if ( 0 >= (*_flow)[e] ) continue;
+	  Node u=_g->target(e);
+	  if ( level[u] >= _node_num ) {
 	    bfs_queue.push(u);
 	    level.set(u, l);
 	    if ( excess[u] > 0 ) {
@@ -329,7 +333,7 @@
 	  }
 	}
       }
-      b=n-2;
+      b=_node_num-2;
 
       while ( true ) {
 
@@ -359,7 +363,7 @@
     /// of the target node \c t. This value equals to the value of
     /// the maximum flow already after running \ref phase1.
     Num flowValue() const {
-      return excess[t];
+      return excess[_target];
     }
 
 
@@ -375,8 +379,8 @@
     void minCut(_CutMap& M) const {
       switch ( status ) {
 	case AFTER_PREFLOW_PHASE_1:
-	for(NodeIt v(*g); v!=INVALID; ++v) {
-	  if (level[v] < n) {
+	for(NodeIt v(*_g); v!=INVALID; ++v) {
+	  if (level[v] < _node_num) {
 	    M.set(v, false);
 	  } else {
 	    M.set(v, true);
@@ -402,24 +406,24 @@
     void minMinCut(_CutMap& M) const {
 
       std::queue<Node> queue;
-      M.set(s,true);
+      M.set(_source,true);
       queue.push(s);
       
       while (!queue.empty()) {
 	Node w=queue.front();
 	queue.pop();
 	
-	for(OutEdgeIt e(*g,w) ; e!=INVALID; ++e) {
-	  Node v=g->target(e);
-	  if (!M[v] && (*flow)[e] < (*capacity)[e] ) {
+	for(OutEdgeIt e(*_g,w) ; e!=INVALID; ++e) {
+	  Node v=_g->target(e);
+	  if (!M[v] && (*_flow)[e] < (*_capacity)[e] ) {
 	    queue.push(v);
 	    M.set(v, true);
 	  }
 	}
 	
-	for(InEdgeIt e(*g,w) ; e!=INVALID; ++e) {
-	  Node v=g->source(e);
-	  if (!M[v] && (*flow)[e] > 0 ) {
+	for(InEdgeIt e(*_g,w) ; e!=INVALID; ++e) {
+	  Node v=_g->source(e);
+	  if (!M[v] && (*_flow)[e] > 0 ) {
 	    queue.push(v);
 	    M.set(v, true);
 	  }
@@ -436,28 +440,28 @@
     template<typename _CutMap>
     void maxMinCut(_CutMap& M) const {
 
-      for(NodeIt v(*g) ; v!=INVALID; ++v) M.set(v, true);
+      for(NodeIt v(*_g) ; v!=INVALID; ++v) M.set(v, true);
 
       std::queue<Node> queue;
 
-      M.set(t,false);
-      queue.push(t);
+      M.set(_target,false);
+      queue.push(_target);
 
       while (!queue.empty()) {
         Node w=queue.front();
 	queue.pop();
 
-	for(InEdgeIt e(*g,w) ; e!=INVALID; ++e) {
-	  Node v=g->source(e);
-	  if (M[v] && (*flow)[e] < (*capacity)[e] ) {
+	for(InEdgeIt e(*_g,w) ; e!=INVALID; ++e) {
+	  Node v=_g->source(e);
+	  if (M[v] && (*_flow)[e] < (*_capacity)[e] ) {
 	    queue.push(v);
 	    M.set(v, false);
 	  }
 	}
 
-	for(OutEdgeIt e(*g,w) ; e!=INVALID; ++e) {
-	  Node v=g->target(e);
-	  if (M[v] && (*flow)[e] > 0 ) {
+	for(OutEdgeIt e(*_g,w) ; e!=INVALID; ++e) {
+	  Node v=_g->target(e);
+	  if (M[v] && (*_flow)[e] > 0 ) {
 	    queue.push(v);
 	    M.set(v, false);
 	  }
@@ -469,41 +473,71 @@
 
     ///Sets the source node to \c _s.
     /// 
-    void setSource(Node _s) { 
-      s=_s; 
+    void source(Node _s) { 
+      _source=_s; 
       if ( flow_prop != ZERO_FLOW ) flow_prop=NO_FLOW;
       status=AFTER_NOTHING; 
     }
 
+    ///Returns the source node.
+
+    ///Returns the source node.
+    /// 
+    Node source() const { 
+      return _source;
+    }
+
     ///Sets the target node to \c _t.
 
     ///Sets the target node to \c _t.
     ///
-    void setTarget(Node _t) { 
-      t=_t; 
+    void target(Node _t) { 
+      _target=_t; 
       if ( flow_prop == GEN_FLOW ) flow_prop=PRE_FLOW;
       status=AFTER_NOTHING; 
     }
 
+    ///Returns the target node.
+
+    ///Returns the target node.
+    /// 
+    Node target() const { 
+      return _target;
+    }
+
     /// Sets the edge map of the capacities to _cap.
 
     /// Sets the edge map of the capacities to _cap.
     /// 
-    void setCap(const CapMap& _cap) { 
-      capacity=&_cap; 
+    void capacityMap(const CapacityMap& _cap) { 
+      _capacity=&_cap; 
       status=AFTER_NOTHING; 
     }
+    /// Returns a reference to to capacity map.
+
+    /// Returns a reference to to capacity map.
+    /// 
+    const CapacityMap &capacityMap() const { 
+      return *_capacity;
+    }
 
     /// Sets the edge map of the flows to _flow.
 
     /// Sets the edge map of the flows to _flow.
     /// 
-    void setFlow(FlowMap& _flow) { 
-      flow=&_flow; 
+    void flowMap(FlowMap& _f) { 
+      _flow=&_f; 
       flow_prop=NO_FLOW;
       status=AFTER_NOTHING; 
     }
+     
+    /// Returns a reference to to flow map.
 
+    /// Returns a reference to to flow map.
+    /// 
+    const FlowMap &flowMap() const { 
+      return *_flow;
+    }
 
   private:
 
@@ -511,32 +545,32 @@
 
       int lev=level[w];
       Num exc=excess[w];
-      int newlevel=n;       //bound on the next level of w
+      int newlevel=_node_num;       //bound on the next level of w
 
-      for(OutEdgeIt e(*g,w) ; e!=INVALID; ++e) {
-	if ( (*flow)[e] >= (*capacity)[e] ) continue;
-	Node v=g->target(e);
+      for(OutEdgeIt e(*_g,w) ; e!=INVALID; ++e) {
+	if ( (*_flow)[e] >= (*_capacity)[e] ) continue;
+	Node v=_g->target(e);
 
 	if( lev > level[v] ) { //Push is allowed now
 	  
-	  if ( excess[v]<=0 && v!=t && v!=s ) {
+	  if ( excess[v]<=0 && v!=_target && v!=_source ) {
 	    next.set(v,first[level[v]]);
 	    first[level[v]]=v;
 	  }
 
-	  Num cap=(*capacity)[e];
-	  Num flo=(*flow)[e];
+	  Num cap=(*_capacity)[e];
+	  Num flo=(*_flow)[e];
 	  Num remcap=cap-flo;
 	  
 	  if ( remcap >= exc ) { //A nonsaturating push.
 	    
-	    flow->set(e, flo+exc);
+	    _flow->set(e, flo+exc);
 	    excess.set(v, excess[v]+exc);
 	    exc=0;
 	    break;
 
 	  } else { //A saturating push.
-	    flow->set(e, cap);
+	    _flow->set(e, cap);
 	    excess.set(v, excess[v]+remcap);
 	    exc-=remcap;
 	  }
@@ -544,23 +578,23 @@
       } //for out edges wv
 
       if ( exc > 0 ) {
-	for(InEdgeIt e(*g,w) ; e!=INVALID; ++e) {
+	for(InEdgeIt e(*_g,w) ; e!=INVALID; ++e) {
 	  
-	  if( (*flow)[e] <= 0 ) continue;
-	  Node v=g->source(e);
+	  if( (*_flow)[e] <= 0 ) continue;
+	  Node v=_g->source(e);
 
 	  if( lev > level[v] ) { //Push is allowed now
 
-	    if ( excess[v]<=0 && v!=t && v!=s ) {
+	    if ( excess[v]<=0 && v!=_target && v!=_source ) {
 	      next.set(v,first[level[v]]);
 	      first[level[v]]=v;
 	    }
 
-	    Num flo=(*flow)[e];
+	    Num flo=(*_flow)[e];
 
 	    if ( flo >= exc ) { //A nonsaturating push.
 
-	      flow->set(e, flo-exc);
+	      _flow->set(e, flo-exc);
 	      excess.set(v, excess[v]+exc);
 	      exc=0;
 	      break;
@@ -568,7 +602,7 @@
 
 	      excess.set(v, excess[v]+flo);
 	      exc-=flo;
-	      flow->set(e,0);
+	      _flow->set(e,0);
 	    }
 	  } else if ( newlevel > level[v] ) newlevel = level[v];
 	} //for in edges vw
@@ -585,14 +619,14 @@
     void preflowPreproc(VecNode& first, NNMap& next, 
 			VecNode& level_list, NNMap& left, NNMap& right)
     {
-      for(NodeIt v(*g); v!=INVALID; ++v) level.set(v,n);
+      for(NodeIt v(*_g); v!=INVALID; ++v) level.set(v,_node_num);
       std::queue<Node> bfs_queue;
       
       if ( flow_prop == GEN_FLOW || flow_prop == PRE_FLOW ) {
 	//Reverse_bfs from t in the residual graph,
 	//to find the starting level.
-	level.set(t,0);
-	bfs_queue.push(t);
+	level.set(_target,0);
+	bfs_queue.push(_target);
 	
 	while ( !bfs_queue.empty() ) {
 	  
@@ -600,10 +634,10 @@
 	  bfs_queue.pop();
 	  int l=level[v]+1;
 	  
-	  for(InEdgeIt e(*g,v) ; e!=INVALID; ++e) {
-	    if ( (*capacity)[e] <= (*flow)[e] ) continue;
-	    Node w=g->source(e);
-	    if ( level[w] == n && w != s ) {
+	  for(InEdgeIt e(*_g,v) ; e!=INVALID; ++e) {
+	    if ( (*_capacity)[e] <= (*_flow)[e] ) continue;
+	    Node w=_g->source(e);
+	    if ( level[w] == _node_num && w != _source ) {
 	      bfs_queue.push(w);
 	      Node z=level_list[l];
 	      if ( z!=INVALID ) left.set(z,w);
@@ -613,10 +647,10 @@
 	    }
 	  }
 	  
-	  for(OutEdgeIt e(*g,v) ; e!=INVALID; ++e) {
-	    if ( 0 >= (*flow)[e] ) continue;
-	    Node w=g->target(e);
-	    if ( level[w] == n && w != s ) {
+	  for(OutEdgeIt e(*_g,v) ; e!=INVALID; ++e) {
+	    if ( 0 >= (*_flow)[e] ) continue;
+	    Node w=_g->target(e);
+	    if ( level[w] == _node_num && w != _source ) {
 	      bfs_queue.push(w);
 	      Node z=level_list[l];
 	      if ( z!=INVALID ) left.set(z,w);
@@ -631,13 +665,13 @@
 
       switch (flow_prop) {
 	case NO_FLOW:  
-	for(EdgeIt e(*g); e!=INVALID; ++e) flow->set(e,0);
+	for(EdgeIt e(*_g); e!=INVALID; ++e) _flow->set(e,0);
 	case ZERO_FLOW:
-	for(NodeIt v(*g); v!=INVALID; ++v) excess.set(v,0);
+	for(NodeIt v(*_g); v!=INVALID; ++v) excess.set(v,0);
 	
 	//Reverse_bfs from t, to find the starting level.
-	level.set(t,0);
-	bfs_queue.push(t);
+	level.set(_target,0);
+	bfs_queue.push(_target);
 	
 	while ( !bfs_queue.empty() ) {
 	  
@@ -645,9 +679,9 @@
 	  bfs_queue.pop();
 	  int l=level[v]+1;
 	  
-	  for(InEdgeIt e(*g,v) ; e!=INVALID; ++e) {
-	    Node w=g->source(e);
-	    if ( level[w] == n && w != s ) {
+	  for(InEdgeIt e(*_g,v) ; e!=INVALID; ++e) {
+	    Node w=_g->source(e);
+	    if ( level[w] == _node_num && w != _source ) {
 	      bfs_queue.push(w);
 	      Node z=level_list[l];
 	      if ( z!=INVALID ) left.set(z,w);
@@ -659,84 +693,84 @@
 	}
 	
 	//the starting flow
-	for(OutEdgeIt e(*g,s) ; e!=INVALID; ++e) {
-	  Num c=(*capacity)[e];
+	for(OutEdgeIt e(*_g,_source) ; e!=INVALID; ++e) {
+	  Num c=(*_capacity)[e];
 	  if ( c <= 0 ) continue;
-	  Node w=g->target(e);
-	  if ( level[w] < n ) {
-	    if ( excess[w] <= 0 && w!=t ) { //putting into the stack
+	  Node w=_g->target(e);
+	  if ( level[w] < _node_num ) {
+	    if ( excess[w] <= 0 && w!=_target ) { //putting into the stack
 	      next.set(w,first[level[w]]);
 	      first[level[w]]=w;
 	    }
-	    flow->set(e, c);
+	    _flow->set(e, c);
 	    excess.set(w, excess[w]+c);
 	  }
 	}
 	break;
 
 	case GEN_FLOW:
-	for(NodeIt v(*g); v!=INVALID; ++v) excess.set(v,0);
+	for(NodeIt v(*_g); v!=INVALID; ++v) excess.set(v,0);
 	{
 	  Num exc=0;
-	  for(InEdgeIt e(*g,t) ; e!=INVALID; ++e) exc+=(*flow)[e];
-	  for(OutEdgeIt e(*g,t) ; e!=INVALID; ++e) exc-=(*flow)[e];
-	  excess.set(t,exc);
+	  for(InEdgeIt e(*_g,_target) ; e!=INVALID; ++e) exc+=(*_flow)[e];
+	  for(OutEdgeIt e(*_g,_target) ; e!=INVALID; ++e) exc-=(*_flow)[e];
+	  excess.set(_target,exc);
 	}
 
 	//the starting flow
-	for(OutEdgeIt e(*g,s); e!=INVALID; ++e)	{
-	  Num rem=(*capacity)[e]-(*flow)[e];
+	for(OutEdgeIt e(*_g,_source); e!=INVALID; ++e)	{
+	  Num rem=(*_capacity)[e]-(*_flow)[e];
 	  if ( rem <= 0 ) continue;
-	  Node w=g->target(e);
-	  if ( level[w] < n ) {
-	    if ( excess[w] <= 0 && w!=t ) { //putting into the stack
+	  Node w=_g->target(e);
+	  if ( level[w] < _node_num ) {
+	    if ( excess[w] <= 0 && w!=_target ) { //putting into the stack
 	      next.set(w,first[level[w]]);
 	      first[level[w]]=w;
 	    }   
-	    flow->set(e, (*capacity)[e]);
+	    _flow->set(e, (*_capacity)[e]);
 	    excess.set(w, excess[w]+rem);
 	  }
 	}
 	
-	for(InEdgeIt e(*g,s); e!=INVALID; ++e) {
-	  if ( (*flow)[e] <= 0 ) continue;
-	  Node w=g->source(e);
-	  if ( level[w] < n ) {
-	    if ( excess[w] <= 0 && w!=t ) {
+	for(InEdgeIt e(*_g,_source); e!=INVALID; ++e) {
+	  if ( (*_flow)[e] <= 0 ) continue;
+	  Node w=_g->source(e);
+	  if ( level[w] < _node_num ) {
+	    if ( excess[w] <= 0 && w!=_target ) {
 	      next.set(w,first[level[w]]);
 	      first[level[w]]=w;
 	    }  
-	    excess.set(w, excess[w]+(*flow)[e]);
-	    flow->set(e, 0);
+	    excess.set(w, excess[w]+(*_flow)[e]);
+	    _flow->set(e, 0);
 	  }
 	}
 	break;
 
 	case PRE_FLOW:	
 	//the starting flow
-	for(OutEdgeIt e(*g,s) ; e!=INVALID; ++e) {
-	  Num rem=(*capacity)[e]-(*flow)[e];
+	for(OutEdgeIt e(*_g,_source) ; e!=INVALID; ++e) {
+	  Num rem=(*_capacity)[e]-(*_flow)[e];
 	  if ( rem <= 0 ) continue;
-	  Node w=g->target(e);
-	  if ( level[w] < n ) flow->set(e, (*capacity)[e]);
+	  Node w=_g->target(e);
+	  if ( level[w] < _node_num ) _flow->set(e, (*_capacity)[e]);
 	}
 	
-	for(InEdgeIt e(*g,s) ; e!=INVALID; ++e) {
-	  if ( (*flow)[e] <= 0 ) continue;
-	  Node w=g->source(e);
-	  if ( level[w] < n ) flow->set(e, 0);
+	for(InEdgeIt e(*_g,_source) ; e!=INVALID; ++e) {
+	  if ( (*_flow)[e] <= 0 ) continue;
+	  Node w=_g->source(e);
+	  if ( level[w] < _node_num ) _flow->set(e, 0);
 	}
 	
 	//computing the excess
-	for(NodeIt w(*g); w!=INVALID; ++w) {
+	for(NodeIt w(*_g); w!=INVALID; ++w) {
 	  Num exc=0;
-	  for(InEdgeIt e(*g,w); e!=INVALID; ++e) exc+=(*flow)[e];
-	  for(OutEdgeIt e(*g,w); e!=INVALID; ++e) exc-=(*flow)[e];
+	  for(InEdgeIt e(*_g,w); e!=INVALID; ++e) exc+=(*_flow)[e];
+	  for(OutEdgeIt e(*_g,w); e!=INVALID; ++e) exc-=(*_flow)[e];
 	  excess.set(w,exc);
 	  
 	  //putting the active nodes into the stack
 	  int lev=level[w];
-	    if ( exc > 0 && lev < n && Node(w) != t ) {
+	    if ( exc > 0 && lev < _node_num && Node(w) != _target ) {
 	      next.set(w,first[lev]);
 	      first[lev]=w;
 	    }
@@ -780,21 +814,21 @@
 	for (int i=lev; i!=k ; ) {
 	  Node v=level_list[++i];
 	  while ( v!=INVALID ) {
-	    level.set(v,n);
+	    level.set(v,_node_num);
 	    v=right[v];
 	  }
 	  level_list[i]=INVALID;
 	  if ( !what_heur ) first[i]=INVALID;
 	}
 
-	level.set(w,n);
+	level.set(w,_node_num);
 	b=lev-1;
 	k=b;
 	//gapping ends
 
       } else {
 
-	if ( newlevel == n ) level.set(w,n);
+	if ( newlevel == _node_num ) level.set(w,_node_num);
 	else {
 	  level.set(w,++newlevel);
 	  next.set(w,first[newlevel]);

Modified: hugo/trunk/src/test/preflow_test.cc
==============================================================================
--- hugo/trunk/src/test/preflow_test.cc	(original)
+++ hugo/trunk/src/test/preflow_test.cc	Thu Mar 17 11:43:57 2005
@@ -49,15 +49,15 @@
 
   preflow_test.run();
   preflow_test.flowValue();
-  preflow_test.setSource(n);
-  preflow_test.setFlow(flow);
+  preflow_test.source(n);
+  preflow_test.flowMap(flow);
 
   preflow_test.phase1(PType::NO_FLOW);
   preflow_test.minCut(cut);
 
   preflow_test.phase2();
-  preflow_test.setTarget(n);
-  preflow_test.setCap(cap);
+  preflow_test.target(n);
+  preflow_test.capacityMap(cap);
   preflow_test.minMinCut(cut);
   preflow_test.maxMinCut(cut);
 }
@@ -129,7 +129,7 @@
 
 
   for(EdgeIt e(g); e!=INVALID; ++e) cap[e]=2*cap[e]; 
-  preflow_test.setCap(cap);  
+  preflow_test.capacityMap(cap);  
 
   preflow_test.phase1(PType::PRE_FLOW);
 
@@ -168,7 +168,7 @@
     ++e;
   }
 
-  preflow_test.setFlow(flow); 
+  preflow_test.flowMap(flow); 
 
   NodeIt tmp1(g,s);
   ++tmp1;
@@ -178,8 +178,8 @@
   ++tmp2;
   if ( tmp2 != INVALID ) t=tmp2;
 
-  preflow_test.setSource(s);
-  preflow_test.setTarget(t); 
+  preflow_test.source(s);
+  preflow_test.target(t); 
   
   preflow_test.run();
 



More information about the Lemon-commits mailing list