Changeset 986:e997802b855c in lemon-0.x for src/work/marci/experiment/edmonds_karp.h
- Timestamp:
- 11/13/04 13:53:28 (19 years ago)
- Branch:
- default
- Phase:
- public
- Convert:
- svn:c9d7d8f5-90d6-0310-b91f-818b3a526b0e/lemon/trunk@1376
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/work/marci/experiment/edmonds_karp.h
r921 r986 41 41 //Edge(const Edge& e) : resG(e.resG), sym(e.sym) { } 42 42 Number free() const { 43 if (resG->G.aNode(sym)==resG->G. tail(sym)) {43 if (resG->G.aNode(sym)==resG->G.source(sym)) { 44 44 return (resG->capacity.get(sym)-resG->flow.get(sym)); 45 45 } else { … … 49 49 bool valid() const { return sym.valid(); } 50 50 void augment(Number a) const { 51 if (resG->G.aNode(sym)==resG->G. tail(sym)) {51 if (resG->G.aNode(sym)==resG->G.source(sym)) { 52 52 resG->flow.set(sym, resG->flow.get(sym)+a); 53 53 //resG->flow[sym]+=a; … … 97 97 } 98 98 99 Node tail(Edge e) const { return G.aNode(e.sym); }100 Node head(Edge e) const { return G.bNode(e.sym); }99 Node source(Edge e) const { return G.aNode(e.sym); } 100 Node target(Edge e) const { return G.bNode(e.sym); } 101 101 102 102 Node aNode(OutEdgeIt e) const { return G.aNode(e.sym); } … … 224 224 } 225 225 226 Node tail(Edge e) const {226 Node source(Edge e) const { 227 227 return ((e.out_or_in) ? G.aNode(e.out) : G.aNode(e.in)); } 228 Node head(Edge e) const {228 Node target(Edge e) const { 229 229 return ((e.out_or_in) ? G.bNode(e.out) : G.bNode(e.in)); } 230 230 … … 288 288 ResGWOutEdgeIt e=bfs; 289 289 if (res_graph.valid(e) && bfs.isBNodeNewlyReached()) { 290 Node v=res_graph. tail(e);291 Node w=res_graph. head(e);290 Node v=res_graph.source(e); 291 Node w=res_graph.target(e); 292 292 pred.set(w, e); 293 293 if (res_graph.valid(pred.get(v))) { … … 296 296 free.set(w, res_graph.resCap(e)); 297 297 } 298 if (res_graph. head(e)==t) { _augment=true; break; }298 if (res_graph.target(e)==t) { _augment=true; break; } 299 299 } 300 300 … … 308 308 ResGWEdge e=pred.get(n); 309 309 res_graph.augment(e, augment_value); 310 n=res_graph. tail(e);310 n=res_graph.source(e); 311 311 } 312 312 } … … 325 325 int get(const typename MapGraphWrapper::Node& n) const { return dist[n]; } 326 326 bool get(const typename MapGraphWrapper::Edge& e) const { 327 return (dist.get(gw. tail(e))<dist.get(gw.head(e)));327 return (dist.get(gw.source(e))<dist.get(gw.target(e))); 328 328 } 329 329 }; … … 344 344 ResGWOutEdgeIt e=bfs; 345 345 if (res_graph.valid(e) && bfs.isBNodeNewlyReached()) { 346 dist.set(res_graph. head(e), dist.get(res_graph.tail(e))+1);346 dist.set(res_graph.target(e), dist.get(res_graph.source(e))+1); 347 347 } 348 348 ++bfs; … … 370 370 typename FilterResGW::EdgeIt e; 371 371 for(filter_res_graph.first(e); filter_res_graph.valid(e); filter_res_graph.next(e)) { 372 //if (dist.get(res_graph. head(e))==dist.get(res_graph.tail(e))+1) {373 typename MG::Edge f=F.addEdge(res_graph_to_F.get(res_graph. tail(e)), res_graph_to_F.get(res_graph.head(e)));372 //if (dist.get(res_graph.target(e))==dist.get(res_graph.source(e))+1) { 373 typename MG::Edge f=F.addEdge(res_graph_to_F.get(res_graph.source(e)), res_graph_to_F.get(res_graph.target(e))); 374 374 original_edge.update(); 375 375 original_edge.set(f, e); … … 424 424 typename MG::Edge e=pred.get(n); 425 425 res_graph.augment(original_edge.get(e), augment_value); 426 n=F. tail(e);426 n=F.source(e); 427 427 if (residual_capacity.get(e)==augment_value) 428 428 F.erase(e); … … 469 469 if (res_graph.valid(e)) { 470 470 if (bfs.isBNodeNewlyReached()) { 471 dist.set(res_graph. head(e), dist.get(res_graph.tail(e))+1);472 typename MG::Edge f=F.addEdge(res_graph_to_F.get(res_graph. tail(e)), res_graph_to_F.get(res_graph.head(e)));471 dist.set(res_graph.target(e), dist.get(res_graph.source(e))+1); 472 typename MG::Edge f=F.addEdge(res_graph_to_F.get(res_graph.source(e)), res_graph_to_F.get(res_graph.target(e))); 473 473 original_edge.update(); 474 474 original_edge.set(f, e); … … 476 476 residual_capacity.set(f, res_graph.resCap(e)); 477 477 } else { 478 if (dist.get(res_graph. head(e))==(dist.get(res_graph.tail(e))+1)) {479 typename MG::Edge f=F.addEdge(res_graph_to_F.get(res_graph. tail(e)), res_graph_to_F.get(res_graph.head(e)));478 if (dist.get(res_graph.target(e))==(dist.get(res_graph.source(e))+1)) { 479 typename MG::Edge f=F.addEdge(res_graph_to_F.get(res_graph.source(e)), res_graph_to_F.get(res_graph.target(e))); 480 480 original_edge.update(); 481 481 original_edge.set(f, e); … … 532 532 typename MG::Edge e=pred.get(n); 533 533 res_graph.augment(original_edge.get(e), augment_value); 534 n=F. tail(e);534 n=F.source(e); 535 535 if (residual_capacity.get(e)==augment_value) 536 536 F.erase(e); … … 558 558 ResGWOutEdgeIt e=bfs; 559 559 if (res_graph.valid(e) && bfs.isBNodeNewlyReached()) { 560 dist.set(res_graph. head(e), dist.get(res_graph.tail(e))+1);560 dist.set(res_graph.target(e), dist.get(res_graph.source(e))+1); 561 561 } 562 562 ++bfs; … … 634 634 typename ErasingResGW::OutEdgeIt e=pred.get(n); 635 635 res_graph.augment(e, augment_value); 636 n=erasing_res_graph. tail(e);636 n=erasing_res_graph.source(e); 637 637 if (res_graph.resCap(e)==0) 638 638 erasing_res_graph.erase(e); … … 669 669 // typename ErasingResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::OutEdgeIt e=bfs; 670 670 // if (res_graph.valid(e) && bfs.isBNodeNewlyReached()) { 671 // dist.set(res_graph. head(e), dist.get(res_graph.tail(e))+1);671 // dist.set(res_graph.target(e), dist.get(res_graph.source(e))+1); 672 672 // } 673 673 // ++bfs; … … 723 723 // EAugEdge e=pred.get(n); 724 724 // res_graph.augment(e, augment_value); 725 // n=res_graph. tail(e);725 // n=res_graph.source(e); 726 726 // if (res_graph.free(e)==0) 727 727 // res_graph.erase(e); … … 818 818 // AugOutEdgeIt e=bfs; 819 819 // if (res_graph.valid(e) && bfs.isBNodeNewlyReached()) { 820 // Node v=res_graph. tail(e);821 // Node w=res_graph. head(e);820 // Node v=res_graph.source(e); 821 // Node w=res_graph.target(e); 822 822 // pred.set(w, e); 823 823 // if (res_graph.valid(pred.get(v))) { … … 826 826 // free.set(w, res_graph.free(e)); 827 827 // } 828 // n=res_graph. head(e);828 // n=res_graph.target(e); 829 829 // if (T->get(n) && (used.get(n)<1) ) { 830 830 // //Number u=0; … … 848 848 // AugEdge e=pred.get(n); 849 849 // res_graph.augment(e, augment_value); 850 // n=res_graph. tail(e);850 // n=res_graph.source(e); 851 851 // } 852 852 // used.set(n, 1); //mind2 vegen jav … … 889 889 // // AugOutEdgeIt e=bfs; 890 890 // // if (res_graph.valid(e) && bfs.isBNodeNewlyReached()) { 891 // // dist.set(res_graph. head(e), dist.get(res_graph.tail(e))+1);891 // // dist.set(res_graph.target(e), dist.get(res_graph.source(e))+1); 892 892 // // } 893 893 … … 911 911 // // //which are in some shortest paths 912 912 // // for(typename AugGraph::EdgeIt e=res_graph.template first<typename AugGraph::EdgeIt>(); res_graph.valid(e); res_graph.next(e)) { 913 // // if (dist.get(res_graph. head(e))==dist.get(res_graph.tail(e))+1) {914 // // typename MutableGraph::Edge f=F.addEdge(res_graph_to_F.get(res_graph. tail(e)), res_graph_to_F.get(res_graph.head(e)));913 // // if (dist.get(res_graph.target(e))==dist.get(res_graph.source(e))+1) { 914 // // typename MutableGraph::Edge f=F.addEdge(res_graph_to_F.get(res_graph.source(e)), res_graph_to_F.get(res_graph.target(e))); 915 915 // // original_edge.update(); 916 916 // // original_edge.set(f, e); … … 964 964 // // typename MutableGraph::Edge e=pred.get(n); 965 965 // // res_graph.augment(original_edge.get(e), augment_value); 966 // // n=F. tail(e);966 // // n=F.source(e); 967 967 // // if (residual_capacity.get(e)==augment_value) 968 968 // // F.erase(e); … … 1015 1015 // typename ErasingResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::OutEdgeIt e=bfs; 1016 1016 // if (res_graph.valid(e) && bfs.isBNodeNewlyReached()) { 1017 // dist.set(res_graph. head(e), dist.get(res_graph.tail(e))+1);1017 // dist.set(res_graph.target(e), dist.get(res_graph.source(e))+1); 1018 1018 // } 1019 1019 // ++bfs; … … 1092 1092 // EAugEdge e=pred.get(n); 1093 1093 // res_graph.augment(e, augment_value); 1094 // n=res_graph. tail(e);1094 // n=res_graph.source(e); 1095 1095 // if (res_graph.free(e)==0) 1096 1096 // res_graph.erase(e); … … 1185 1185 // // AugOutEdgeIt e=/*AugOutEdgeIt*/(bfs); 1186 1186 // // if (e.valid() && bfs.isBNodeNewlyReached()) { 1187 // // Node v=res_graph. tail(e);1188 // // Node w=res_graph. head(e);1187 // // Node v=res_graph.source(e); 1188 // // Node w=res_graph.target(e); 1189 1189 // // pred.set(w, e); 1190 1190 // // if (pred.get(v).valid()) { … … 1193 1193 // // free.set(w, e.free()); 1194 1194 // // } 1195 // // if (TMap.get(res_graph. head(e))) {1195 // // if (TMap.get(res_graph.target(e))) { 1196 1196 // // _augment=true; 1197 // // reached_t_node=res_graph. head(e);1197 // // reached_t_node=res_graph.target(e); 1198 1198 // // break; 1199 1199 // // } … … 1209 1209 // // AugEdge e=pred.get(n); 1210 1210 // // e.augment(augment_value); 1211 // // n=res_graph. tail(e);1211 // // n=res_graph.source(e); 1212 1212 // // } 1213 1213 // // }
Note: See TracChangeset
for help on using the changeset viewer.