# HG changeset patch # User marci # Date 1091121529 0 # Node ID d976ba609099f3bcb7cb6b464f3ba848e2edd351 # Parent 7ac96d31280f172b5276cae3e45db4d819af871c jacint javitgatott. diff -r 7ac96d31280f -r d976ba609099 src/hugo/max_flow.h --- a/src/hugo/max_flow.h Tue Jul 27 19:08:23 2004 +0000 +++ b/src/hugo/max_flow.h Thu Jul 29 17:18:49 2004 +0000 @@ -140,7 +140,7 @@ ///\todo Document, please. /// MaxFlow(const Graph& _G, Node _s, Node _t, - const CapMap& _capacity, FlowMap& _flow) : + const CapMap& _capacity, FlowMap& _flow) : g(&_G), s(_s), t(_t), capacity(&_capacity), flow(&_flow), n(_G.nodeNum()), level(_G), excess(_G,0), status(AFTER_NOTHING) { } @@ -217,7 +217,6 @@ VecFirst first(n, INVALID); NNMap next(*g, INVALID); //maybe INVALID is not needed - // VecStack active(n); NNMap left(*g, INVALID); NNMap right(*g, INVALID); @@ -254,7 +253,6 @@ next.set(v,first[lev]); first[lev]=v; } - // active[lev].push(v); } break; } @@ -280,7 +278,7 @@ } } - preflowPreproc(fe, next, first,/*active*/ level_list, left, right); + preflowPreproc(fe, next, first, level_list, left, right); //End of preprocessing @@ -293,15 +291,13 @@ } else break; } - if ( !g->valid(first[b])/*active[b].empty()*/ ) --b; + if ( !g->valid(first[b]) ) --b; else { end=false; Node w=first[b]; first[b]=next[w]; - /* Node w=active[b].top(); - active[b].pop();*/ - int newlevel=push(w,/*active*/next, first); - if ( excess[w] > 0 ) relabel(w, newlevel, /*active*/next, first, level_list, + int newlevel=push(w, next, first); + if ( excess[w] > 0 ) relabel(w, newlevel, next, first, level_list, left, right, b, k, what_heur); ++numrelabel; @@ -340,7 +336,6 @@ VecFirst first(n, INVALID); NNMap next(*g, INVALID); //maybe INVALID is not needed - // VecStack active(n); level.set(s,0); std::queue bfs_queue; bfs_queue.push(s); @@ -361,7 +356,6 @@ if ( excess[u] > 0 ) { next.set(u,first[l]); first[l]=u; - //active[l].push(u); } } } @@ -376,7 +370,6 @@ if ( excess[u] > 0 ) { next.set(u,first[l]); first[l]=u; - //active[l].push(u); } } } @@ -387,13 +380,11 @@ if ( b == 0 ) break; - if ( !g->valid(first[b])/*active[b].empty()*/ ) --b; + if ( !g->valid(first[b]) ) --b; else { Node w=first[b]; first[b]=next[w]; - /* Node w=active[b].top(); - active[b].pop();*/ int newlevel=push(w,next, first/*active*/); //relabel @@ -401,7 +392,6 @@ level.set(w,++newlevel); next.set(w,first[newlevel]); first[newlevel]=w; - //active[newlevel].push(w); b=newlevel; } } // if stack[b] is nonempty @@ -420,9 +410,18 @@ Num a=0; for(InEdgeIt e(*g,t);g->valid(e);g->next(e)) a+=(*flow)[e]; for(OutEdgeIt e(*g,t);g->valid(e);g->next(e)) a-=(*flow)[e]; - + return a; //marci figyu: excess[t] epp ezt adja preflow 1. fazisa utan } + Num flowValue2() const { + return excess[t]; +// Num a=0; +// for(InEdgeIt e(*g,t);g->valid(e);g->next(e)) a+=(*flow)[e]; +// for(OutEdgeIt e(*g,t);g->valid(e);g->next(e)) a-=(*flow)[e]; +// return a; +// //marci figyu: excess[t] epp ezt adja preflow 1. fazisa utan + + } ///Returns a minimum value cut after calling \ref preflowPhase1. @@ -451,6 +450,8 @@ break; case AFTER_PRE_FLOW_PHASE_2: case AFTER_NOTHING: + case AFTER_AUGMENTING: + case AFTER_FAST_AUGMENTING: minMinCut(M); break; } @@ -591,8 +592,6 @@ if ( excess[v]<=0 && v!=t && v!=s ) { next.set(v,first[level[v]]); first[level[v]]=v; - // int lev_v=level[v]; - //active[lev_v].push(v); } Num cap=(*capacity)[e]; @@ -626,8 +625,6 @@ if ( excess[v]<=0 && v!=t && v!=s ) { next.set(v,first[level[v]]); first[level[v]]=v; - //int lev_v=level[v]; - //active[lev_v].push(v); } Num flo=(*flow)[e]; @@ -700,7 +697,6 @@ { next.set(w,first[level[w]]); first[level[w]]=w; - //active[level[w]].push(w); } flow->set(e, c); excess.set(w, excess[w]+c); @@ -765,7 +761,6 @@ { next.set(w,first[level[w]]); first[level[w]]=w; - //active[level[w]].push(w); } flow->set(e, (*capacity)[e]); excess.set(w, excess[w]+rem); @@ -782,7 +777,6 @@ { next.set(w,first[level[w]]); first[level[w]]=w; - //active[level[w]].push(w); } excess.set(w, excess[w]+(*flow)[f]); flow->set(f, 0); @@ -834,11 +828,6 @@ } level_list[i]=INVALID; if ( !what_heur ) first[i]=INVALID; - /*{ - while ( !active[i].empty() ) { - active[i].pop(); //FIXME: ezt szebben kene - } - }*/ } level.set(w,n); @@ -853,7 +842,6 @@ level.set(w,++newlevel); next.set(w,first[newlevel]); first[newlevel]=w; - // active[newlevel].push(w); if ( what_heur ) b=newlevel; if ( k < newlevel ) ++k; //now k=newlevel Node z=level_list[newlevel];