# HG changeset patch # User marci # Date 1085143239 0 # Node ID 9971eb8bfbe88b859525584c329ab70518098c5d # Parent a9878222d5c8edc8d8e99ad8efb14b955e9cdcf1 max_flow.h bug correction diff -r a9878222d5c8 -r 9971eb8bfbe8 src/hugo/graph_wrapper.h --- a/src/hugo/graph_wrapper.h Fri May 21 10:57:30 2004 +0000 +++ b/src/hugo/graph_wrapper.h Fri May 21 12:40:39 2004 +0000 @@ -1380,6 +1380,9 @@ const CapacityMap* capacity; const FlowMap* flow; public: + void setGraph(const Graph& _graph) { graph=&_graph; } + void setCapacity(const CapacityMap& _capacity) { capacity=&_capacity; } + void setFlow(const FlowMap& _flow) { flow=&_flow; } ForwardFilter(const Graph& _graph, const CapacityMap& _capacity, const FlowMap& _flow) : graph(&_graph), capacity(&_capacity), flow(&_flow) { } @@ -1395,6 +1398,9 @@ const CapacityMap* capacity; const FlowMap* flow; public: + void setGraph(const Graph& _graph) { graph=&_graph; } + void setCapacity(const CapacityMap& _capacity) { capacity=&_capacity; } + void setFlow(const FlowMap& _flow) { flow=&_flow; } BackwardFilter(const Graph& _graph, const CapacityMap& _capacity, const FlowMap& _flow) : graph(&_graph), capacity(&_capacity), flow(&_flow) { } @@ -1424,6 +1430,14 @@ FlowMap* flow; ForwardFilter forward_filter; BackwardFilter backward_filter; +// ResGraphWrapper() : Parent(), +// capacity(0), flow(0) { } +// void setCapacityMap(const CapacityMap& _capacity) { +// capacity=&_capacity; +// } +// void setFlowMap(FlowMap& _flow) { +// flow=&_flow; +// } public: ResGraphWrapper(Graph& _graph, const CapacityMap& _capacity, FlowMap& _flow) : diff -r a9878222d5c8 -r 9971eb8bfbe8 src/work/jacint/max_flow.h --- a/src/work/jacint/max_flow.h Fri May 21 10:57:30 2004 +0000 +++ b/src/work/jacint/max_flow.h Fri May 21 12:40:39 2004 +0000 @@ -122,6 +122,7 @@ enum StatusEnum { AFTER_NOTHING, AFTER_AUGMENTING, + AFTER_FAST_AUGMENTING, AFTER_PRE_FLOW_PHASE_1, AFTER_PRE_FLOW_PHASE_2 }; @@ -265,7 +266,7 @@ void actMinCut(_CutMap& M) const { NodeIt v; switch (status) { - case AFTER_PRE_FLOW_PHASE_1: + case AFTER_PRE_FLOW_PHASE_1: for(g->first(v); g->valid(v); g->next(v)) { if (level[v] < n) { M.set(v, false); @@ -274,11 +275,11 @@ } } break; - case AFTER_PRE_FLOW_PHASE_2: - case AFTER_NOTHING: + case AFTER_PRE_FLOW_PHASE_2: + case AFTER_NOTHING: minMinCut(M); break; - case AFTER_AUGMENTING: + case AFTER_AUGMENTING: for(g->first(v); g->valid(v); g->next(v)) { if (level[v]) { M.set(v, true); @@ -287,6 +288,15 @@ } } break; + case AFTER_FAST_AUGMENTING: + for(g->first(v); g->valid(v); g->next(v)) { + if (level[v]==number_of_augmentations) { + M.set(v, true); + } else { + M.set(v, false); + } + } + break; } } @@ -944,9 +954,9 @@ ResGW res_graph(*g, *capacity, *flow); bool _augment=false; - if (status!=AFTER_AUGMENTING) { - FOR_EACH_LOC(typename Graph::NodeIt, e, *g) level.set(e, 3*n); - number_of_augmentations=3*n+1; + if (status!=AFTER_FAST_AUGMENTING) { + FOR_EACH_LOC(typename Graph::NodeIt, e, *g) level.set(e, 0); + number_of_augmentations=1; } else { ++number_of_augmentations; } @@ -991,7 +1001,7 @@ } } - status=AFTER_AUGMENTING; + status=AFTER_FAST_AUGMENTING; return _augment; }