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