diff -r 6f8e34f638c0 -r efea403c9595 src/work/edmonds_karp.h --- a/src/work/edmonds_karp.h Tue Mar 16 15:28:04 2004 +0000 +++ b/src/work/edmonds_karp.h Wed Mar 17 13:33:13 2004 +0000 @@ -266,15 +266,9 @@ typedef typename AugGraph::OutEdgeIt AugOutEdgeIt; typedef typename AugGraph::Edge AugEdge; - //AugGraph res_graph; - //typedef typename AugGraph::NodeMap ReachedMap; - //typename AugGraph::NodeMap pred; - //typename AugGraph::NodeMap free; public: MaxFlow(const Graph& _G, Node _s, Node _t, FlowMap& _flow, const CapacityMap& _capacity) : - G(&_G), s(_s), t(_t), flow(&_flow), capacity(&_capacity) //, - //res_graph(G, flow, capacity), pred(res_graph), free(res_graph) - { } + G(&_G), s(_s), t(_t), flow(&_flow), capacity(&_capacity) { } bool augmentOnShortestPath() { AugGraph res_graph(*G, *flow, *capacity); bool _augment=false; @@ -290,7 +284,7 @@ //searching for augmenting path while ( !res_bfs.finished() ) { - AugOutEdgeIt e=/*AugOutEdgeIt*/(res_bfs); + AugOutEdgeIt e=res_bfs; if (res_graph.valid(e) && res_bfs.isBNodeNewlyReached()) { Node v=res_graph.tail(e); Node w=res_graph.head(e); @@ -312,7 +306,6 @@ while (res_graph.valid(pred.get(n))) { AugEdge e=pred.get(n); res_graph.augment(e, augment_value); - //e.augment(augment_value); n=res_graph.tail(e); } } @@ -320,21 +313,7 @@ return _augment; } - template bool augmentOnBlockingFlow() { - -// std::cout << "number of nodes: " << G->nodeNum() << std::endl; -// typename Graph::NodeIt n; -// G->first(n); -// for( ; G->valid(n); G->next(n)) { -// std::cout << G->id(n) << std::endl; -// } -// std::cout << "meg elek 1"; - -// for(typename Graph::NodeIt n=G->template first(); G->valid(n); G->next(n)) { -// std::cout << G->id(n) << std::endl; -// } -// std::cout << "meg elek 2"; - + template bool augmentOnBlockingFlow() { bool _augment=false; AugGraph res_graph(*G, *flow, *capacity); @@ -345,7 +324,7 @@ bfs.pushAndSetReached(s); typename AugGraph::NodeMap dist(res_graph); //filled up with 0's while ( !bfs.finished() ) { - AugOutEdgeIt e=/*AugOutEdgeIt*/(bfs); + AugOutEdgeIt e=bfs; if (res_graph.valid(e) && bfs.isBNodeNewlyReached()) { dist.set(res_graph.head(e), dist.get(res_graph.tail(e))+1); } @@ -353,11 +332,6 @@ ++bfs; } //computing distances from s in the residual graph -// for(typename AugGraph::NodeIt n=res_graph.template first(); res_graph.valid(n); res_graph.next(n)) { -// std::cout << res_graph.id(n) << std::endl; -// } -// std::cout << "meg elek"; - MutableGraph F; typename AugGraph::NodeMap res_graph_to_F(res_graph); @@ -383,10 +357,6 @@ } } -// for(typename MutableGraph::NodeIt n=F.template first(); F.valid(n); F.next(n)) { -// std::cout << F.id(n) << std::endl; -// } - bool __augment=true; while (__augment) { @@ -405,10 +375,6 @@ ++dfs; if (F.valid(typename MutableGraph::OutEdgeIt(dfs))) { if (dfs.isBNodeNewlyReached()) { -// std::cout << "OutEdgeIt: " << dfs; -// std::cout << " aNode: " << F.aNode(dfs); -// std::cout << " bNode: " << F.bNode(dfs) << " "; - typename MutableGraph::Node v=F.aNode(dfs); typename MutableGraph::Node w=F.bNode(dfs); pred.set(w, dfs); @@ -418,7 +384,6 @@ free.set(w, residual_capacity.get(dfs)); } if (w==tF) { - //std::cout << "AUGMENTATION"< ReachedMap; BfsIterator4< ErasingResGraphWrapper, typename ErasingResGraphWrapper::OutEdgeIt, ErasingResGraphWrapper::NodeMap > bfs(res_graph); - //std::cout << "meg jo2" << std::endl; + bfs.pushAndSetReached(s); - bfs.pushAndSetReached(s); - //std::cout << "meg jo2.5" << std::endl; - - //typename EAugGraph::NodeMap dist(res_graph); //filled up with 0's typename ErasingResGraphWrapper:: NodeMap& dist=res_graph.dist; - //std::cout << "meg jo2.6" << std::endl; while ( !bfs.finished() ) { typename ErasingResGraphWrapper::OutEdgeIt e=bfs; -// EAugOutEdgeIt e=/*AugOutEdgeIt*/(bfs); - //if (res_graph.valid(e)) { - // std::cout<<"a:"<(); res_graph.valid(n); res_graph.next(n)) { -// std::cout << "dist: " << dist.get(n) << std::endl; -// } - bool __augment=true; while (__augment) { -// std::cout << "new iteration"<< std::endl; __augment=false; //computing blocking flow with dfs @@ -519,36 +462,23 @@ ++dfs; if (res_graph.valid(EAugOutEdgeIt(dfs))) { if (dfs.isBNodeNewlyReached()) { -// std::cout << "OutEdgeIt: " << dfs; -// std::cout << " aNode: " << res_graph.aNode(dfs); -// std::cout << " res cap: " << EAugOutEdgeIt(dfs).free(); -// std::cout << " bNode: " << res_graph.bNode(dfs) << " "; typename EAugGraph::Node v=res_graph.aNode(dfs); typename EAugGraph::Node w=res_graph.bNode(dfs); pred.set(w, EAugOutEdgeIt(dfs)); - - //std::cout << EAugOutEdgeIt(dfs).free() << std::endl; if (res_graph.valid(pred.get(v))) { - free.set(w, std::min(free.get(v), res_graph.free(/*EAugOutEdgeIt*/(dfs)))); + free.set(w, std::min(free.get(v), res_graph.free(dfs))); } else { - free.set(w, res_graph.free(/*EAugOutEdgeIt*/(dfs))); + free.set(w, res_graph.free(dfs)); } if (w==t) { -// std::cout << "t is reached, AUGMENTATION"<> "; - res_graph.erase(dfs); } } @@ -558,11 +488,9 @@ if (__augment) { typename EAugGraph::Node n=t; Number augment_value=free.get(t); -// std::cout << "av:" << augment_value << std::endl; while (res_graph.valid(pred.get(n))) { EAugEdge e=pred.get(n); res_graph.augment(e, augment_value); - //e.augment(augment_value); n=res_graph.tail(e); if (res_graph.free(e)==0) res_graph.erase(e);