src/work/athos/preflow_push.hh
changeset 505 8589c0658839
parent 331 f5461f8bc59b
     1.1 --- a/src/work/athos/preflow_push.hh	Mon May 03 08:13:41 2004 +0000
     1.2 +++ b/src/work/athos/preflow_push.hh	Mon May 03 09:00:09 2004 +0000
     1.3 @@ -25,6 +25,9 @@
     1.4      typedef typename Graph::Edge Edge;
     1.5      typedef typename Graph::OutEdgeIt OutEdgeIt;
     1.6      typedef typename Graph::InEdgeIt InEdgeIt;
     1.7 +    typedef typename Graph::EdgeMap<T> CapacityType;
     1.8 +
     1.9 +    typedef ResGraphWrapper<const Graph,int,CapacityType,CapacityType> ResGraphType;
    1.10  
    1.11  
    1.12      //---------------------------------------------
    1.13 @@ -47,10 +50,10 @@
    1.14      Graph& G;
    1.15      Node s;
    1.16      Node t;
    1.17 -    typename Graph::EdgeMap<T> &capacity;
    1.18 +    CapacityType &capacity;
    1.19  
    1.20      //output
    1.21 -    typename Graph::EdgeMap<T> preflow;
    1.22 +    CapacityType preflow;
    1.23      T maxflow_value;
    1.24    
    1.25      //auxiliary variables for computation
    1.26 @@ -131,7 +134,7 @@
    1.27        }
    1.28        cout<<endl;
    1.29      }
    1.30 -
    1.31 +    /*
    1.32      //Modifies the excess of the node and makes sufficient changes
    1.33      void modify_excess(const Node& a ,T v){
    1.34        //T old_value=excess[a];
    1.35 @@ -155,7 +158,7 @@
    1.36        modify_excess(G.tail(j),-v);
    1.37  
    1.38      }
    1.39 -
    1.40 +    */
    1.41      //Gives the active node to work with 
    1.42      //(depending on the implementation to be used)
    1.43      Node get_active_node(){
    1.44 @@ -380,6 +383,26 @@
    1.45  
    1.46  	//Out edges from node a
    1.47  	{
    1.48 +	  ResGraphType::OutEdgeIt j=res_graph.first(j,a);
    1.49 +	  while (res_graph.valid(j) && e){
    1.50 +	    if (is_admissible_forward_edge(j,new_level)){
    1.51 +	      v=min(e,res_graph.resCap(j));
    1.52 +	      e -= v;
    1.53 +	      //New node might become active
    1.54 +	      if (excess[res_graph.head(j)]==0){
    1.55 +		make_active(res_graph.head(j));
    1.56 +	      }
    1.57 +	      res_graph.augment(j,v);
    1.58 +	      excess[res_graph.tail(j)] -= v;
    1.59 +	      excess[res_graph.head(j)] += v;
    1.60 +	    }
    1.61 +	    res_graph.next(j);
    1.62 +	  }
    1.63 +	}
    1.64 +
    1.65 +	/*
    1.66 +	//Out edges from node a
    1.67 +	{
    1.68  	  OutEdgeIt j=G.template first<OutEdgeIt>(a);
    1.69  	  while (G.valid(j) && e){
    1.70  
    1.71 @@ -411,6 +434,7 @@
    1.72  	    G.next(j);
    1.73  	  }
    1.74  	}
    1.75 +	*/
    1.76  
    1.77  	//if (G.id(a)==999)
    1.78  	//cout<<new_level<<" e: "<<e<<endl;