src/work/jacint/preflow.h
changeset 470 b64956c701c9
parent 469 5f6ea657b75d
child 471 a40985a922d0
     1.1 --- a/src/work/jacint/preflow.h	Thu Apr 29 10:51:58 2004 +0000
     1.2 +++ b/src/work/jacint/preflow.h	Thu Apr 29 11:09:12 2004 +0000
     1.3 @@ -153,10 +153,8 @@
     1.4  	  
     1.5  	  break;
     1.6  	}
     1.7 -//       default:
     1.8 -// 	break;
     1.9 -// 	ZERO_FLOW ize kell
    1.10 -
    1.11 +      default:
    1.12 +	break;
    1.13        }
    1.14        
    1.15        preflowPreproc( fe, active, level_list, left, right );
    1.16 @@ -217,7 +215,7 @@
    1.17  	      
    1.18  	InEdgeIt e;
    1.19  	for(g->first(e,v); g->valid(e); g->next(e)) {
    1.20 -	  if ( (*capacity)[e] == (*flow)[e] ) continue;
    1.21 +	  if ( (*capacity)[e] <= (*flow)[e] ) continue;
    1.22  	  Node u=g->tail(e);
    1.23  	  if ( level[u] >= n ) { 
    1.24  	    bfs_queue.push(u);
    1.25 @@ -228,7 +226,7 @@
    1.26  	
    1.27  	OutEdgeIt f;
    1.28  	for(g->first(f,v); g->valid(f); g->next(f)) {
    1.29 -	  if ( 0 == (*flow)[f] ) continue;
    1.30 +	  if ( 0 >= (*flow)[f] ) continue;
    1.31  	  Node u=g->head(f);
    1.32  	  if ( level[u] >= n ) { 
    1.33  	    bfs_queue.push(u);
    1.34 @@ -388,12 +386,12 @@
    1.35        OutEdgeIt e;
    1.36        for(g->first(e,w); g->valid(e); g->next(e)) {
    1.37  	    
    1.38 -	if ( (*flow)[e] == (*capacity)[e] ) continue; 
    1.39 +	if ( (*flow)[e] >= (*capacity)[e] ) continue; 
    1.40  	Node v=g->head(e);            
    1.41  	    
    1.42  	if( lev > level[v] ) { //Push is allowed now
    1.43  	  
    1.44 -	  if ( excess[v]==0 && v!=t && v!=s ) {
    1.45 +	  if ( excess[v]<=0 && v!=t && v!=s ) {
    1.46  	    int lev_v=level[v];
    1.47  	    active[lev_v].push(v);
    1.48  	  }
    1.49 @@ -421,12 +419,12 @@
    1.50  	InEdgeIt e;
    1.51  	for(g->first(e,w); g->valid(e); g->next(e)) {
    1.52  	  
    1.53 -	  if( (*flow)[e] == 0 ) continue; 
    1.54 +	  if( (*flow)[e] <= 0 ) continue; 
    1.55  	  Node v=g->tail(e); 
    1.56  	  
    1.57  	  if( lev > level[v] ) { //Push is allowed now
    1.58  	    
    1.59 -	    if ( excess[v]==0 && v!=t && v!=s ) {
    1.60 +	    if ( excess[v]<=0 && v!=t && v!=s ) {
    1.61  	      int lev_v=level[v];
    1.62  	      active[lev_v].push(v);
    1.63  	    }
    1.64 @@ -493,10 +491,10 @@
    1.65  	  for(g->first(e,s); g->valid(e); g->next(e)) 
    1.66  	    {
    1.67  	      Num c=(*capacity)[e];
    1.68 -	      if ( c == 0 ) continue;
    1.69 +	      if ( c <= 0 ) continue;
    1.70  	      Node w=g->head(e);
    1.71  	      if ( level[w] < n ) {	  
    1.72 -		if ( excess[w] == 0 && w!=t ) active[level[w]].push(w);
    1.73 +		if ( excess[w] <= 0 && w!=t ) active[level[w]].push(w);
    1.74  		flow->set(e, c); 
    1.75  		excess.set(w, excess[w]+c);
    1.76  	      }
    1.77 @@ -520,7 +518,7 @@
    1.78  	    
    1.79  	    InEdgeIt e;
    1.80  	    for(g->first(e,v); g->valid(e); g->next(e)) {
    1.81 -	      if ( (*capacity)[e] == (*flow)[e] ) continue;
    1.82 +	      if ( (*capacity)[e] <= (*flow)[e] ) continue;
    1.83  	      Node w=g->tail(e);
    1.84  	      if ( level[w] == n && w != s ) {
    1.85  		bfs_queue.push(w);
    1.86 @@ -534,7 +532,7 @@
    1.87  	    
    1.88  	    OutEdgeIt f;
    1.89  	    for(g->first(f,v); g->valid(f); g->next(f)) {
    1.90 -	      if ( 0 == (*flow)[f] ) continue;
    1.91 +	      if ( 0 >= (*flow)[f] ) continue;
    1.92  	      Node w=g->head(f);
    1.93  	      if ( level[w] == n && w != s ) {
    1.94  		bfs_queue.push(w);
    1.95 @@ -553,10 +551,10 @@
    1.96  	  for(g->first(e,s); g->valid(e); g->next(e)) 
    1.97  	    {
    1.98  	      Num rem=(*capacity)[e]-(*flow)[e];
    1.99 -	      if ( rem == 0 ) continue;
   1.100 +	      if ( rem <= 0 ) continue;
   1.101  	      Node w=g->head(e);
   1.102  	      if ( level[w] < n ) {	  
   1.103 -		if ( excess[w] == 0 && w!=t ) active[level[w]].push(w);
   1.104 +		if ( excess[w] <= 0 && w!=t ) active[level[w]].push(w);
   1.105  		flow->set(e, (*capacity)[e]); 
   1.106  		excess.set(w, excess[w]+rem);
   1.107  	      }
   1.108 @@ -565,10 +563,10 @@
   1.109  	  InEdgeIt f;
   1.110  	  for(g->first(f,s); g->valid(f); g->next(f)) 
   1.111  	    {
   1.112 -	      if ( (*flow)[f] == 0 ) continue;
   1.113 +	      if ( (*flow)[f] <= 0 ) continue;
   1.114  	      Node w=g->tail(f);
   1.115  	      if ( level[w] < n ) {	  
   1.116 -		if ( excess[w] == 0 && w!=t ) active[level[w]].push(w);
   1.117 +		if ( excess[w] <= 0 && w!=t ) active[level[w]].push(w);
   1.118  		excess.set(w, excess[w]+(*flow)[f]);
   1.119  		flow->set(f, 0); 
   1.120  	      }
   1.121 @@ -582,7 +580,7 @@
   1.122  
   1.123      void relabel(Node w, int newlevel, VecStack& active,  
   1.124  		 VecNode& level_list, NNMap& left, 
   1.125 -		 NNMap& right, int& b, int& k, const bool what_heur ) {
   1.126 +		 NNMap& right, int& b, int& k, bool what_heur ) {
   1.127  
   1.128        Num lev=level[w];	
   1.129