Changeset 467:8cab0547eeae in lemon-0.x
- Timestamp:
- 04/29/04 12:29:51 (20 years ago)
- Branch:
- default
- Phase:
- public
- Convert:
- svn:c9d7d8f5-90d6-0310-b91f-818b3a526b0e/lemon/trunk@618
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/work/marci/edmonds_karp.h
r466 r467 15 15 namespace hugo { 16 16 17 template <typename Graph, typename Num ber,18 typename Cap acityMap, typename FlowMap>17 template <typename Graph, typename Num, 18 typename CapMap, typename FlowMap> 19 19 class MaxFlow { 20 20 protected: … … 27 27 Node s; 28 28 Node t; 29 const Cap acityMap* capacity;29 const CapMap* capacity; 30 30 FlowMap* flow; 31 typedef ResGraphWrapper<const Graph, Num ber, CapacityMap, FlowMap> ResGW;31 typedef ResGraphWrapper<const Graph, Num, CapMap, FlowMap> ResGW; 32 32 typedef typename ResGW::OutEdgeIt ResGWOutEdgeIt; 33 33 typedef typename ResGW::Edge ResGWEdge; … … 38 38 public: 39 39 40 MaxFlow(const Graph& _g, Node _s, Node _t, const Cap acityMap& _capacity,40 MaxFlow(const Graph& _g, Node _s, Node _t, const CapMap& _capacity, 41 41 FlowMap& _flow) : 42 42 g(&_g), s(_s), t(_t), capacity(&_capacity), flow(&_flow), level(_g) { } … … 54 54 pred.set(s, INVALID); 55 55 56 typename ResGW::template NodeMap<Num ber> free(res_graph);56 typename ResGW::template NodeMap<Num> free(res_graph); 57 57 58 58 //searching for augmenting path … … 76 76 if (_augment) { 77 77 Node n=t; 78 Num beraugment_value=free[t];78 Num augment_value=free[t]; 79 79 while (res_graph.valid(pred[n])) { 80 80 ResGWEdge e=pred[n]; … … 146 146 typename MG::Node tF=res_graph_to_F[t]; 147 147 typename MG::template EdgeMap<ResGWEdge> original_edge(F); 148 typename MG::template EdgeMap<Num ber> residual_capacity(F);148 typename MG::template EdgeMap<Num> residual_capacity(F); 149 149 150 150 //Making F to the graph containing the edges of the residual graph … … 174 174 //invalid iterators for sources 175 175 176 typename MG::template NodeMap<Num ber> free(F);176 typename MG::template NodeMap<Num> free(F); 177 177 178 178 dfs.pushAndSetReached(sF); … … 203 203 if (__augment) { 204 204 typename MG::Node n=tF; 205 Num beraugment_value=free[tF];205 Num augment_value=free[tF]; 206 206 while (F.valid(pred[n])) { 207 207 typename MG::Edge e=pred[n]; … … 249 249 typename MG::Node tF=res_graph_to_F[t]; 250 250 typename MG::template EdgeMap<ResGWEdge> original_edge(F); 251 typename MG::template EdgeMap<Num ber> residual_capacity(F);251 typename MG::template EdgeMap<Num> residual_capacity(F); 252 252 253 253 while ( !bfs.finished() ) { … … 284 284 //invalid iterators for sources 285 285 286 typename MG::template NodeMap<Num ber> free(F);286 typename MG::template NodeMap<Num> free(F); 287 287 288 288 dfs.pushAndSetReached(sF); … … 313 313 if (__augment) { 314 314 typename MG::Node n=tF; 315 Num beraugment_value=free[tF];315 Num augment_value=free[tF]; 316 316 while (F.valid(pred[n])) { 317 317 typename MG::Edge e=pred[n]; … … 386 386 //invalid iterators for sources 387 387 388 typename ErasingResGW::template NodeMap<Num ber>388 typename ErasingResGW::template NodeMap<Num> 389 389 free1(erasing_res_graph); 390 390 … … 428 428 if (__augment) { 429 429 typename ErasingResGW::Node n=typename FilterResGW::Node(typename ResGW::Node(t)); 430 // typename ResGW::NodeMap<Num ber> a(res_graph);430 // typename ResGW::NodeMap<Num> a(res_graph); 431 431 // typename ResGW::Node b; 432 // Num berj=a[b];433 // typename FilterResGW::NodeMap<Num ber> a1(filter_res_graph);432 // Num j=a[b]; 433 // typename FilterResGW::NodeMap<Num> a1(filter_res_graph); 434 434 // typename FilterResGW::Node b1; 435 // Num berj1=a1[b1];436 // typename ErasingResGW::NodeMap<Num ber> a2(erasing_res_graph);435 // Num j1=a1[b1]; 436 // typename ErasingResGW::NodeMap<Num> a2(erasing_res_graph); 437 437 // typename ErasingResGW::Node b2; 438 // Num berj2=a2[b2];439 Num beraugment_value=free1[n];438 // Num j2=a2[b2]; 439 Num augment_value=free1[n]; 440 440 while (erasing_res_graph.valid(pred[n])) { 441 441 typename ErasingResGW::OutEdgeIt e=pred[n]; … … 470 470 } 471 471 472 Num berflowValue() {473 Num bera=0;472 Num flowValue() { 473 Num a=0; 474 474 OutEdgeIt e; 475 475 for(g->first(e, s); g->valid(e); g->next(e)) { … … 482 482 483 483 484 // template <typename Graph, typename Num ber, typename FlowMap, typename CapacityMap>484 // template <typename Graph, typename Num, typename FlowMap, typename CapMap> 485 485 // class MaxMatching { 486 486 // public: … … 501 501 // //Node t; 502 502 // FlowMap* flow; 503 // const Cap acityMap* capacity;504 // typedef ResGraphWrapper<Graph, Num ber, FlowMap, CapacityMap > AugGraph;503 // const CapMap* capacity; 504 // typedef ResGraphWrapper<Graph, Num, FlowMap, CapMap > AugGraph; 505 505 // typedef typename AugGraph::OutEdgeIt AugOutEdgeIt; 506 506 // typedef typename AugGraph::Edge AugEdge; … … 508 508 509 509 // public: 510 // MaxMatching(const Graph& _G, SMap& _S, TMap& _T, FlowMap& _flow, const Cap acityMap& _capacity) :510 // MaxMatching(const Graph& _G, SMap& _S, TMap& _T, FlowMap& _flow, const CapMap& _capacity) : 511 511 // G(&_G), S(&_S), T(&_T), flow(&_flow), capacity(&_capacity), used(_G) { } 512 512 // bool augmentOnShortestPath() { … … 519 519 // for(NodeIt s=G->template first<NodeIt>(); G->valid(s); G->next(s)) { 520 520 // if ((S->get(s)) && (used.get(s)<1) ) { 521 // //Num beru=0;521 // //Num u=0; 522 522 // //for(OutEdgeIt e=G->template first<OutEdgeIt>(s); G->valid(e); G->next(e)) 523 523 // //u+=flow->get(e); … … 529 529 // } 530 530 531 // typename AugGraph::NodeMap<Num ber> free(res_graph);531 // typename AugGraph::NodeMap<Num> free(res_graph); 532 532 533 533 // Node n; … … 546 546 // n=res_graph.head(e); 547 547 // if (T->get(n) && (used.get(n)<1) ) { 548 // //Num beru=0;548 // //Num u=0; 549 549 // //for(InEdgeIt f=G->template first<InEdgeIt>(n); G->valid(f); G->next(f)) 550 550 // //u+=flow->get(f); … … 562 562 // //Node n=t; 563 563 // used.set(n, 1); //mind2 vegen jav 564 // Num beraugment_value=free.get(n);564 // Num augment_value=free.get(n); 565 565 // while (res_graph.valid(pred.get(n))) { 566 566 // AugEdge e=pred.get(n); … … 589 589 // // for(NodeIt s=G->template first<NodeIt>(); G->valid(s); G->next(s)) { 590 590 // // if (S->get(s)) { 591 // // Num beru=0;591 // // Num u=0; 592 592 // // for(OutEdgeIt e=G->template first<OutEdgeIt>(s); G->valid(e); G->next(e)) 593 593 // // u+=flow->get(e); … … 624 624 625 625 // // typename MutableGraph::EdgeMap<AugEdge> original_edge(F); 626 // // typename MutableGraph::EdgeMap<Num ber> residual_capacity(F);626 // // typename MutableGraph::EdgeMap<Num> residual_capacity(F); 627 627 628 628 // // //Making F to the graph containing the edges of the residual graph … … 649 649 // // //invalid iterators for sources 650 650 651 // // typename MutableGraph::NodeMap<Num ber> free(F);651 // // typename MutableGraph::NodeMap<Num> free(F); 652 652 653 653 // // dfs.pushAndSetReached(sF); … … 678 678 // // if (__augment) { 679 679 // // typename MutableGraph::Node n=tF; 680 // // Num beraugment_value=free.get(tF);680 // // Num augment_value=free.get(tF); 681 681 // // while (F.valid(pred.get(n))) { 682 682 // // typename MutableGraph::Edge e=pred.get(n); … … 697 697 // bool _augment=false; 698 698 699 // //typedef ErasingResGraphWrapper<Graph, Num ber, FlowMap, CapacityMap> EAugGraph;700 // typedef FilterGraphWrapper< ErasingResGraphWrapper<Graph, Num ber, FlowMap, CapacityMap> > EAugGraph;699 // //typedef ErasingResGraphWrapper<Graph, Num, FlowMap, CapMap> EAugGraph; 700 // typedef FilterGraphWrapper< ErasingResGraphWrapper<Graph, Num, FlowMap, CapMap> > EAugGraph; 701 701 // typedef typename EAugGraph::OutEdgeIt EAugOutEdgeIt; 702 702 // typedef typename EAugGraph::Edge EAugEdge; … … 706 706 // //typedef typename EAugGraph::NodeMap<bool> ReachedMap; 707 707 // BfsIterator< 708 // ErasingResGraphWrapper<Graph, Num ber, FlowMap, CapacityMap>,709 // /*typename ErasingResGraphWrapper<Graph, Num ber, FlowMap, CapacityMap>::OutEdgeIt,*/710 // ErasingResGraphWrapper<Graph, Num ber, FlowMap, CapacityMap>::NodeMap<bool> > bfs(res_graph);708 // ErasingResGraphWrapper<Graph, Num, FlowMap, CapMap>, 709 // /*typename ErasingResGraphWrapper<Graph, Num, FlowMap, CapMap>::OutEdgeIt,*/ 710 // ErasingResGraphWrapper<Graph, Num, FlowMap, CapMap>::NodeMap<bool> > bfs(res_graph); 711 711 712 712 … … 714 714 // for(NodeIt s=G->template first<NodeIt>(); G->valid(s); G->next(s)) { 715 715 // if (S->get(s)) { 716 // Num beru=0;716 // Num u=0; 717 717 // for(OutEdgeIt e=G->template first<OutEdgeIt>(s); G->valid(e); G->next(e)) 718 718 // u+=flow->get(e); … … 727 727 // //bfs.pushAndSetReached(s); 728 728 729 // typename ErasingResGraphWrapper<Graph, Num ber, FlowMap, CapacityMap>::729 // typename ErasingResGraphWrapper<Graph, Num, FlowMap, CapMap>:: 730 730 // NodeMap<int>& dist=res_graph.dist; 731 731 732 732 // while ( !bfs.finished() ) { 733 // typename ErasingResGraphWrapper<Graph, Num ber, FlowMap, CapacityMap>::OutEdgeIt e=bfs;733 // typename ErasingResGraphWrapper<Graph, Num, FlowMap, CapMap>::OutEdgeIt e=bfs; 734 734 // if (res_graph.valid(e) && bfs.isBNodeNewlyReached()) { 735 735 // dist.set(res_graph.head(e), dist.get(res_graph.tail(e))+1); … … 751 751 // //invalid iterators for sources 752 752 753 // typename EAugGraph::NodeMap<Num ber> free(res_graph);753 // typename EAugGraph::NodeMap<Num> free(res_graph); 754 754 755 755 … … 757 757 // for(NodeIt s=G->template first<NodeIt>(); G->valid(s); G->next(s)) { 758 758 // if (S->get(s)) { 759 // Num beru=0;759 // Num u=0; 760 760 // for(OutEdgeIt e=G->template first<OutEdgeIt>(s); G->valid(e); G->next(e)) 761 761 // u+=flow->get(e); … … 788 788 // n=w; 789 789 // if (T->get(w)) { 790 // Num beru=0;790 // Num u=0; 791 791 // for(InEdgeIt f=G->template first<InEdgeIt>(n); G->valid(f); G->next(f)) 792 792 // u+=flow->get(f); … … 806 806 // if (__augment) { 807 807 // // typename EAugGraph::Node n=t; 808 // Num beraugment_value=free.get(n);808 // Num augment_value=free.get(n); 809 809 // while (res_graph.valid(pred.get(n))) { 810 810 // EAugEdge e=pred.get(n); … … 836 836 // // } 837 837 // // } 838 // Num berflowValue() {839 // Num bera=0;838 // Num flowValue() { 839 // Num a=0; 840 840 // EdgeIt e; 841 841 // for(G->/*getF*/first(e); G->valid(e); G->next(e)) { … … 851 851 852 852 853 // // template <typename Graph, typename Num ber, typename FlowMap, typename CapacityMap>853 // // template <typename Graph, typename Num, typename FlowMap, typename CapMap> 854 854 // // class MaxFlow2 { 855 855 // // public: … … 864 864 // // std::list<Node>& T; 865 865 // // FlowMap& flow; 866 // // const Cap acityMap& capacity;867 // // typedef ResGraphWrapper<Graph, Num ber, FlowMap, CapacityMap > AugGraph;866 // // const CapMap& capacity; 867 // // typedef ResGraphWrapper<Graph, Num, FlowMap, CapMap > AugGraph; 868 868 // // typedef typename AugGraph::OutEdgeIt AugOutEdgeIt; 869 869 // // typedef typename AugGraph::Edge AugEdge; … … 871 871 // // typename Graph::NodeMap<bool> TMap; 872 872 // // public: 873 // // MaxFlow2(const Graph& _G, std::list<Node>& _S, std::list<Node>& _T, FlowMap& _flow, const Cap acityMap& _capacity) : G(_G), S(_S), T(_T), flow(_flow), capacity(_capacity), SMap(_G), TMap(_G) {873 // // MaxFlow2(const Graph& _G, std::list<Node>& _S, std::list<Node>& _T, FlowMap& _flow, const CapMap& _capacity) : G(_G), S(_S), T(_T), flow(_flow), capacity(_capacity), SMap(_G), TMap(_G) { 874 874 // // for(typename std::list<Node>::const_iterator i=S.begin(); 875 875 // // i!=S.end(); ++i) { … … 897 897 // // //filled up with invalid iterators 898 898 899 // // typename AugGraph::NodeMap<Num ber> free(res_graph);899 // // typename AugGraph::NodeMap<Num> free(res_graph); 900 900 901 901 // // //searching for augmenting path … … 923 923 // // if (_augment) { 924 924 // // Node n=reached_t_node; 925 // // Num beraugment_value=free.get(reached_t_node);925 // // Num augment_value=free.get(reached_t_node); 926 926 // // while (pred.get(n).valid()) { 927 927 // // AugEdge e=pred.get(n); … … 936 936 // // while (augment()) { } 937 937 // // } 938 // // Num berflowValue() {939 // // Num bera=0;938 // // Num flowValue() { 939 // // Num a=0; 940 940 // // for(typename std::list<Node>::const_iterator i=S.begin(); 941 941 // // i!=S.end(); ++i) {
Note: See TracChangeset
for help on using the changeset viewer.