Changeset 986:e997802b855c in lemon-0.x for src/work/jacint
- Timestamp:
- 11/13/04 13:53:28 (19 years ago)
- Branch:
- default
- Phase:
- public
- Convert:
- svn:c9d7d8f5-90d6-0310-b91f-818b3a526b0e/lemon/trunk@1376
- Location:
- src/work/jacint
- Files:
-
- 11 edited
Legend:
- Unmodified
- Added
- Removed
-
src/work/jacint/max_flow.h
r921 r986 327 327 OutEdgeIt e; 328 328 for(g->first(e,w) ; g->valid(e); g->next(e)) { 329 Node v=g-> head(e);329 Node v=g->target(e); 330 330 if (!M[v] && (*flow)[e] < (*capacity)[e] ) { 331 331 queue.push(v); … … 336 336 InEdgeIt f; 337 337 for(g->first(f,w) ; g->valid(f); g->next(f)) { 338 Node v=g-> tail(f);338 Node v=g->source(f); 339 339 if (!M[v] && (*flow)[f] > 0 ) { 340 340 queue.push(v); … … 371 371 InEdgeIt e; 372 372 for(g->first(e,w) ; g->valid(e); g->next(e)) { 373 Node v=g-> tail(e);373 Node v=g->source(e); 374 374 if (M[v] && (*flow)[e] < (*capacity)[e] ) { 375 375 queue.push(v); … … 380 380 OutEdgeIt f; 381 381 for(g->first(f,w) ; g->valid(f); g->next(f)) { 382 Node v=g-> head(f);382 Node v=g->target(f); 383 383 if (M[v] && (*flow)[f] > 0 ) { 384 384 queue.push(v); … … 434 434 435 435 if ( (*flow)[e] >= (*capacity)[e] ) continue; 436 Node v=g-> head(e);436 Node v=g->target(e); 437 437 438 438 if( lev > level[v] ) { //Push is allowed now … … 467 467 468 468 if( (*flow)[e] <= 0 ) continue; 469 Node v=g-> tail(e);469 Node v=g->source(e); 470 470 471 471 if( lev > level[v] ) { //Push is allowed now … … 522 522 InEdgeIt e; 523 523 for(g->first(e,v); g->valid(e); g->next(e)) { 524 Node w=g-> tail(e);524 Node w=g->source(e); 525 525 if ( level[w] == n && w != s ) { 526 526 bfs_queue.push(w); … … 540 540 Num c=(*capacity)[e]; 541 541 if ( c <= 0 ) continue; 542 Node w=g-> head(e);542 Node w=g->target(e); 543 543 if ( level[w] < n ) { 544 544 if ( excess[w] <= 0 && w!=t ) active[level[w]].push(w); … … 567 567 for(g->first(e,v); g->valid(e); g->next(e)) { 568 568 if ( (*capacity)[e] <= (*flow)[e] ) continue; 569 Node w=g-> tail(e);569 Node w=g->source(e); 570 570 if ( level[w] == n && w != s ) { 571 571 bfs_queue.push(w); … … 581 581 for(g->first(f,v); g->valid(f); g->next(f)) { 582 582 if ( 0 >= (*flow)[f] ) continue; 583 Node w=g-> head(f);583 Node w=g->target(f); 584 584 if ( level[w] == n && w != s ) { 585 585 bfs_queue.push(w); … … 600 600 Num rem=(*capacity)[e]-(*flow)[e]; 601 601 if ( rem <= 0 ) continue; 602 Node w=g-> head(e);602 Node w=g->target(e); 603 603 if ( level[w] < n ) { 604 604 if ( excess[w] <= 0 && w!=t ) active[level[w]].push(w); … … 612 612 { 613 613 if ( (*flow)[f] <= 0 ) continue; 614 Node w=g-> tail(f);614 Node w=g->source(f); 615 615 if ( level[w] < n ) { 616 616 if ( excess[w] <= 0 && w!=t ) active[level[w]].push(w); … … 711 711 // return dist[n]; } 712 712 // bool get(const typename MapGraphWrapper::Edge& e) const { 713 // return (dist.get(g-> tail(e))<dist.get(g->head(e))); }713 // return (dist.get(g->source(e))<dist.get(g->target(e))); } 714 714 bool operator[](const typename MapGraphWrapper::Edge& e) const { 715 return (dist[g-> tail(e)]<dist[g->head(e)]);715 return (dist[g->source(e)]<dist[g->target(e)]); 716 716 } 717 717 }; … … 861 861 for(g->first(e,v); g->valid(e); g->next(e)) { 862 862 if ( (*capacity)[e] <= (*flow)[e] ) continue; 863 Node u=g-> tail(e);863 Node u=g->source(e); 864 864 if ( level[u] >= n ) { 865 865 bfs_queue.push(u); … … 872 872 for(g->first(f,v); g->valid(f); g->next(f)) { 873 873 if ( 0 >= (*flow)[f] ) continue; 874 Node u=g-> head(f);874 Node u=g->target(f); 875 875 if ( level[u] >= n ) { 876 876 bfs_queue.push(u); … … 926 926 ResGWOutEdgeIt e=bfs; 927 927 if (res_graph.valid(e) && bfs.isBNodeNewlyReached()) { 928 Node v=res_graph. tail(e);929 Node w=res_graph. head(e);928 Node v=res_graph.source(e); 929 Node w=res_graph.target(e); 930 930 pred.set(w, e); 931 931 if (res_graph.valid(pred[v])) { … … 934 934 free.set(w, res_graph.resCap(e)); 935 935 } 936 if (res_graph. head(e)==t) { _augment=true; break; }936 if (res_graph.target(e)==t) { _augment=true; break; } 937 937 } 938 938 … … 946 946 ResGWEdge e=pred[n]; 947 947 res_graph.augment(e, augment_value); 948 n=res_graph. tail(e);948 n=res_graph.source(e); 949 949 } 950 950 } … … 984 984 ResGWOutEdgeIt e=bfs; 985 985 if (res_graph.valid(e) && bfs.isBNodeNewlyReached()) { 986 Node v=res_graph. tail(e);987 Node w=res_graph. head(e);986 Node v=res_graph.source(e); 987 Node w=res_graph.target(e); 988 988 pred.set(w, e); 989 989 if (res_graph.valid(pred[v])) { … … 992 992 free.set(w, res_graph.resCap(e)); 993 993 } 994 if (res_graph. head(e)==t) { _augment=true; break; }994 if (res_graph.target(e)==t) { _augment=true; break; } 995 995 } 996 996 … … 1004 1004 ResGWEdge e=pred[n]; 1005 1005 res_graph.augment(e, augment_value); 1006 n=res_graph. tail(e);1006 n=res_graph.source(e); 1007 1007 } 1008 1008 } … … 1051 1051 if (res_graph.valid(e)) { 1052 1052 if (bfs.isBNodeNewlyReached()) { 1053 dist.set(res_graph. head(e), dist[res_graph.tail(e)]+1);1054 typename MG::Edge f=F.addEdge(res_graph_to_F[res_graph. tail(e)],1055 res_graph_to_F[res_graph. head(e)]);1053 dist.set(res_graph.target(e), dist[res_graph.source(e)]+1); 1054 typename MG::Edge f=F.addEdge(res_graph_to_F[res_graph.source(e)], 1055 res_graph_to_F[res_graph.target(e)]); 1056 1056 original_edge.update(); 1057 1057 original_edge.set(f, e); … … 1059 1059 residual_capacity.set(f, res_graph.resCap(e)); 1060 1060 } else { 1061 if (dist[res_graph. head(e)]==(dist[res_graph.tail(e)]+1)) {1062 typename MG::Edge f=F.addEdge(res_graph_to_F[res_graph. tail(e)],1063 res_graph_to_F[res_graph. head(e)]);1061 if (dist[res_graph.target(e)]==(dist[res_graph.source(e)]+1)) { 1062 typename MG::Edge f=F.addEdge(res_graph_to_F[res_graph.source(e)], 1063 res_graph_to_F[res_graph.target(e)]); 1064 1064 original_edge.update(); 1065 1065 original_edge.set(f, e); … … 1115 1115 typename MG::Edge e=pred[n]; 1116 1116 res_graph.augment(original_edge[e], augment_value); 1117 n=F. tail(e);1117 n=F.source(e); 1118 1118 if (residual_capacity[e]==augment_value) 1119 1119 F.erase(e); … … 1148 1148 ResGWOutEdgeIt e=bfs; 1149 1149 if (res_graph.valid(e) && bfs.isBNodeNewlyReached()) { 1150 dist.set(res_graph. head(e), dist[res_graph.tail(e)]+1);1150 dist.set(res_graph.target(e), dist[res_graph.source(e)]+1); 1151 1151 } 1152 1152 ++bfs; … … 1248 1248 typename ErasingResGW::OutEdgeIt e=pred[n]; 1249 1249 res_graph.augment(e, augment_value); 1250 n=erasing_res_graph. tail(e);1250 n=erasing_res_graph.source(e); 1251 1251 if (res_graph.resCap(e)==0) 1252 1252 erasing_res_graph.erase(e); -
src/work/jacint/max_flow_bug.cc
r921 r986 43 43 EdgeIt e; 44 44 for(G.first(e); G.valid(e); G.next(e)) { 45 if (mincut[G. tail(e)] && !mincut[G.head(e)]) min_min_cut_value+=cap[e];45 if (mincut[G.source(e)] && !mincut[G.target(e)]) min_min_cut_value+=cap[e]; 46 46 } 47 47 … … 50 50 int min_cut_value=0; 51 51 for(G.first(e); G.valid(e); G.next(e)) { 52 if (cut[G. tail(e)] && !cut[G.head(e)])52 if (cut[G.source(e)] && !cut[G.target(e)]) 53 53 min_cut_value+=cap[e]; 54 54 } … … 58 58 int max_min_cut_value=0; 59 59 for(G.first(e); G.valid(e); G.next(e)) { 60 if (maxcut[G. tail(e)] && !maxcut[G.head(e)])60 if (maxcut[G.source(e)] && !maxcut[G.target(e)]) 61 61 max_min_cut_value+=cap[e]; 62 62 } … … 89 89 int min_min_cut_value2=0; 90 90 for(G.first(e); G.valid(e); G.next(e)) { 91 if (mincut2[G. tail(e)] && !mincut2[G.head(e)]) min_min_cut_value2+=cap[e];91 if (mincut2[G.source(e)] && !mincut2[G.target(e)]) min_min_cut_value2+=cap[e]; 92 92 } 93 93 … … 96 96 int min_cut_value2=0; 97 97 for(G.first(e); G.valid(e); G.next(e)) { 98 if (cut2[G. tail(e)] && !cut2[G.head(e)])98 if (cut2[G.source(e)] && !cut2[G.target(e)]) 99 99 min_cut_value2+=cap[e]; 100 100 } … … 104 104 int max_min_cut_value2=0; 105 105 for(G.first(e); G.valid(e); G.next(e)) { 106 if (maxcut2[G. tail(e)] && !maxcut2[G.head(e)])106 if (maxcut2[G.source(e)] && !maxcut2[G.target(e)]) 107 107 max_min_cut_value2+=cap[e]; 108 108 } … … 128 128 int min_min_cut_value3=0; 129 129 for(G.first(e); G.valid(e); G.next(e)) { 130 if (mincut3[G. tail(e)] && !mincut3[G.head(e)]) min_min_cut_value3+=cap[e];130 if (mincut3[G.source(e)] && !mincut3[G.target(e)]) min_min_cut_value3+=cap[e]; 131 131 } 132 132 … … 135 135 int min_cut_value3=0; 136 136 for(G.first(e); G.valid(e); G.next(e)) { 137 if (cut3[G. tail(e)] && !cut3[G.head(e)])137 if (cut3[G.source(e)] && !cut3[G.target(e)]) 138 138 min_cut_value3+=cap[e]; 139 139 } … … 143 143 int max_min_cut_value3=0; 144 144 for(G.first(e); G.valid(e); G.next(e)) { 145 if (maxcut3[G. tail(e)] && !maxcut3[G.head(e)])145 if (maxcut3[G.source(e)] && !maxcut3[G.target(e)]) 146 146 max_min_cut_value3+=cap[e]; 147 147 } -
src/work/jacint/max_flow_test.cc
r921 r986 46 46 EdgeIt e; 47 47 for(G.first(e); G.valid(e); G.next(e)) { 48 if (mincut[G. tail(e)] && !mincut[G.head(e)]) min_min_cut_value+=cap[e];48 if (mincut[G.source(e)] && !mincut[G.target(e)]) min_min_cut_value+=cap[e]; 49 49 } 50 50 … … 53 53 int min_cut_value=0; 54 54 for(G.first(e); G.valid(e); G.next(e)) { 55 if (cut[G. tail(e)] && !cut[G.head(e)])55 if (cut[G.source(e)] && !cut[G.target(e)]) 56 56 min_cut_value+=cap[e]; 57 57 } … … 61 61 int max_min_cut_value=0; 62 62 for(G.first(e); G.valid(e); G.next(e)) { 63 if (maxcut[G. tail(e)] && !maxcut[G.head(e)])63 if (maxcut[G.source(e)] && !maxcut[G.target(e)]) 64 64 max_min_cut_value+=cap[e]; 65 65 } … … 92 92 int min_min_cut_value2=0; 93 93 for(G.first(e); G.valid(e); G.next(e)) { 94 if (mincut2[G. tail(e)] && !mincut2[G.head(e)]) min_min_cut_value2+=cap[e];94 if (mincut2[G.source(e)] && !mincut2[G.target(e)]) min_min_cut_value2+=cap[e]; 95 95 } 96 96 … … 99 99 int min_cut_value2=0; 100 100 for(G.first(e); G.valid(e); G.next(e)) { 101 if (cut2[G. tail(e)] && !cut2[G.head(e)])101 if (cut2[G.source(e)] && !cut2[G.target(e)]) 102 102 min_cut_value2+=cap[e]; 103 103 } … … 107 107 int max_min_cut_value2=0; 108 108 for(G.first(e); G.valid(e); G.next(e)) { 109 if (maxcut2[G. tail(e)] && !maxcut2[G.head(e)])109 if (maxcut2[G.source(e)] && !maxcut2[G.target(e)]) 110 110 max_min_cut_value2+=cap[e]; 111 111 } … … 131 131 int min_min_cut_value3=0; 132 132 for(G.first(e); G.valid(e); G.next(e)) { 133 if (mincut3[G. tail(e)] && !mincut3[G.head(e)]) min_min_cut_value3+=cap[e];133 if (mincut3[G.source(e)] && !mincut3[G.target(e)]) min_min_cut_value3+=cap[e]; 134 134 } 135 135 … … 138 138 int min_cut_value3=0; 139 139 for(G.first(e); G.valid(e); G.next(e)) { 140 if (cut3[G. tail(e)] && !cut3[G.head(e)])140 if (cut3[G.source(e)] && !cut3[G.target(e)]) 141 141 min_cut_value3+=cap[e]; 142 142 } … … 146 146 int max_min_cut_value3=0; 147 147 for(G.first(e); G.valid(e); G.next(e)) { 148 if (maxcut3[G. tail(e)] && !maxcut3[G.head(e)])148 if (maxcut3[G.source(e)] && !maxcut3[G.target(e)]) 149 149 max_min_cut_value3+=cap[e]; 150 150 } -
src/work/jacint/max_matching.cc
r921 r986 191 191 EdgeIt e; 192 192 for(G.first(e); G.valid(e); G.next(e) ) { 193 if ( (pos[G. head(e)]==max_matching.C && pos[G.tail(e)]==max_matching.D) ||194 (pos[G. head(e)]==max_matching.D && pos[G.tail(e)]==max_matching.C) )193 if ( (pos[G.target(e)]==max_matching.C && pos[G.source(e)]==max_matching.D) || 194 (pos[G.target(e)]==max_matching.D && pos[G.source(e)]==max_matching.C) ) 195 195 noedge=false; 196 196 } -
src/work/jacint/max_matching.h
r921 r986 154 154 Edge e=map[v]; 155 155 if ( G.valid(e) ) 156 G. tail(e) == v ? mate.set(v,G.head(e)) : mate.set(v,G.tail(e));156 G.source(e) == v ? mate.set(v,G.target(e)) : mate.set(v,G.source(e)); 157 157 } 158 158 } … … 173 173 NodeIt e; 174 174 for( G.first(e); G.valid(e); G.next(e)) { 175 if ( todo[G. head(e)] && todo[G.tail(e)] ) {176 Node u=G. tail(e);177 Node v=G. head(e);175 if ( todo[G.target(e)] && todo[G.source(e)] ) { 176 Node u=G.source(e); 177 Node v=G.target(e); 178 178 if ( mate[u]=v && mate[v]=u ) { 179 179 map.set(u,e); … … 197 197 for( G.first(e); G.valid(e); G.next(e)) { 198 198 if ( G.valid(e) ) { 199 Node u=G. tail(e);200 Node v=G. head(e);199 Node u=G.source(e); 200 Node v=G.target(e); 201 201 mate.set(u,v); 202 202 mate.set(v,u); … … 223 223 for( G.first(e); G.valid(e); G.next(e)) { 224 224 map.set(e,false); 225 if ( todo[G. head(e)] && todo[G.tail(e)] ) {226 Node u=G. tail(e);227 Node v=G. head(e);225 if ( todo[G.target(e)] && todo[G.source(e)] ) { 226 Node u=G.source(e); 227 Node v=G.target(e); 228 228 if ( mate[u]=v && mate[v]=u ) { 229 229 map.set(e,true); -
src/work/jacint/max_save.h
r921 r986 259 259 OutEdgeIt e; 260 260 for(g->first(e,w) ; g->valid(e); g->next(e)) { 261 Node v=g-> head(e);261 Node v=g->target(e); 262 262 if (!M[v] && (*flow)[e] < (*capacity)[e] ) { 263 263 queue.push(v); … … 268 268 InEdgeIt f; 269 269 for(g->first(f,w) ; g->valid(f); g->next(f)) { 270 Node v=g-> tail(f);270 Node v=g->source(f); 271 271 if (!M[v] && (*flow)[f] > 0 ) { 272 272 queue.push(v); … … 305 305 InEdgeIt e; 306 306 for(g->first(e,w) ; g->valid(e); g->next(e)) { 307 Node v=g-> tail(e);307 Node v=g->source(e); 308 308 if (M[v] && (*flow)[e] < (*capacity)[e] ) { 309 309 queue.push(v); … … 314 314 OutEdgeIt f; 315 315 for(g->first(f,w) ; g->valid(f); g->next(f)) { 316 Node v=g-> head(f);316 Node v=g->target(f); 317 317 if (M[v] && (*flow)[f] > 0 ) { 318 318 queue.push(v); … … 370 370 371 371 if ( (*flow)[e] >= (*capacity)[e] ) continue; 372 Node v=g-> head(e);372 Node v=g->target(e); 373 373 374 374 if( lev > level[v] ) { //Push is allowed now … … 403 403 404 404 if( (*flow)[e] <= 0 ) continue; 405 Node v=g-> tail(e);405 Node v=g->source(e); 406 406 407 407 if( lev > level[v] ) { //Push is allowed now … … 457 457 InEdgeIt e; 458 458 for(g->first(e,v); g->valid(e); g->next(e)) { 459 Node w=g-> tail(e);459 Node w=g->source(e); 460 460 if ( level[w] == n && w != s ) { 461 461 bfs_queue.push(w); … … 475 475 Num c=(*capacity)[e]; 476 476 if ( c <= 0 ) continue; 477 Node w=g-> head(e);477 Node w=g->target(e); 478 478 if ( level[w] < n ) { 479 479 if ( excess[w] <= 0 && w!=t ) active[level[w]].push(w); … … 502 502 for(g->first(e,v); g->valid(e); g->next(e)) { 503 503 if ( (*capacity)[e] <= (*flow)[e] ) continue; 504 Node w=g-> tail(e);504 Node w=g->source(e); 505 505 if ( level[w] == n && w != s ) { 506 506 bfs_queue.push(w); … … 516 516 for(g->first(f,v); g->valid(f); g->next(f)) { 517 517 if ( 0 >= (*flow)[f] ) continue; 518 Node w=g-> head(f);518 Node w=g->target(f); 519 519 if ( level[w] == n && w != s ) { 520 520 bfs_queue.push(w); … … 535 535 Num rem=(*capacity)[e]-(*flow)[e]; 536 536 if ( rem <= 0 ) continue; 537 Node w=g-> head(e);537 Node w=g->target(e); 538 538 if ( level[w] < n ) { 539 539 if ( excess[w] <= 0 && w!=t ) active[level[w]].push(w); … … 547 547 { 548 548 if ( (*flow)[f] <= 0 ) continue; 549 Node w=g-> tail(f);549 Node w=g->source(f); 550 550 if ( level[w] < n ) { 551 551 if ( excess[w] <= 0 && w!=t ) active[level[w]].push(w); … … 645 645 // return dist[n]; } 646 646 // bool get(const typename MapGraphWrapper::Edge& e) const { 647 // return (dist.get(g-> tail(e))<dist.get(g->head(e))); }647 // return (dist.get(g->source(e))<dist.get(g->target(e))); } 648 648 bool operator[](const typename MapGraphWrapper::Edge& e) const { 649 return (dist[g-> tail(e)]<dist[g->head(e)]);649 return (dist[g->source(e)]<dist[g->target(e)]); 650 650 } 651 651 }; … … 784 784 for(g->first(e,v); g->valid(e); g->next(e)) { 785 785 if ( (*capacity)[e] <= (*flow)[e] ) continue; 786 Node u=g-> tail(e);786 Node u=g->source(e); 787 787 if ( level[u] >= n ) { 788 788 bfs_queue.push(u); … … 795 795 for(g->first(f,v); g->valid(f); g->next(f)) { 796 796 if ( 0 >= (*flow)[f] ) continue; 797 Node u=g-> head(f);797 Node u=g->target(f); 798 798 if ( level[u] >= n ) { 799 799 bfs_queue.push(u); … … 847 847 ResGWOutEdgeIt e=bfs; 848 848 if (res_graph.valid(e) && bfs.isBNodeNewlyReached()) { 849 Node v=res_graph. tail(e);850 Node w=res_graph. head(e);849 Node v=res_graph.source(e); 850 Node w=res_graph.target(e); 851 851 pred.set(w, e); 852 852 if (res_graph.valid(pred[v])) { … … 855 855 free.set(w, res_graph.resCap(e)); 856 856 } 857 if (res_graph. head(e)==t) { _augment=true; break; }857 if (res_graph.target(e)==t) { _augment=true; break; } 858 858 } 859 859 … … 867 867 ResGWEdge e=pred[n]; 868 868 res_graph.augment(e, augment_value); 869 n=res_graph. tail(e);869 n=res_graph.source(e); 870 870 } 871 871 } … … 920 920 if (res_graph.valid(e)) { 921 921 if (bfs.isBNodeNewlyReached()) { 922 dist.set(res_graph. head(e), dist[res_graph.tail(e)]+1);923 typename MG::Edge f=F.addEdge(res_graph_to_F[res_graph. tail(e)], res_graph_to_F[res_graph.head(e)]);922 dist.set(res_graph.target(e), dist[res_graph.source(e)]+1); 923 typename MG::Edge f=F.addEdge(res_graph_to_F[res_graph.source(e)], res_graph_to_F[res_graph.target(e)]); 924 924 original_edge.update(); 925 925 original_edge.set(f, e); … … 927 927 residual_capacity.set(f, res_graph.resCap(e)); 928 928 } else { 929 if (dist[res_graph. head(e)]==(dist[res_graph.tail(e)]+1)) {930 typename MG::Edge f=F.addEdge(res_graph_to_F[res_graph. tail(e)], res_graph_to_F[res_graph.head(e)]);929 if (dist[res_graph.target(e)]==(dist[res_graph.source(e)]+1)) { 930 typename MG::Edge f=F.addEdge(res_graph_to_F[res_graph.source(e)], res_graph_to_F[res_graph.target(e)]); 931 931 original_edge.update(); 932 932 original_edge.set(f, e); … … 982 982 typename MG::Edge e=pred[n]; 983 983 res_graph.augment(original_edge[e], augment_value); 984 n=F. tail(e);984 n=F.source(e); 985 985 if (residual_capacity[e]==augment_value) 986 986 F.erase(e); … … 1016 1016 ResGWOutEdgeIt e=bfs; 1017 1017 if (res_graph.valid(e) && bfs.isBNodeNewlyReached()) { 1018 dist.set(res_graph. head(e), dist[res_graph.tail(e)]+1);1018 dist.set(res_graph.target(e), dist[res_graph.source(e)]+1); 1019 1019 } 1020 1020 ++bfs; … … 1113 1113 typename ErasingResGW::OutEdgeIt e=pred[n]; 1114 1114 res_graph.augment(e, augment_value); 1115 n=erasing_res_graph. tail(e);1115 n=erasing_res_graph.source(e); 1116 1116 if (res_graph.resCap(e)==0) 1117 1117 erasing_res_graph.erase(e); -
src/work/jacint/preflow.cc
r921 r986 47 47 for(G.first(e); G.valid(e); G.next(e)) { 48 48 int c=cap[e]; 49 if (mincut[G. tail(e)] && !mincut[G.head(e)]) min_min_cut_value+=c;50 if (cut[G. tail(e)] && !cut[G.head(e)]) min_cut_value+=c;51 if (maxcut[G. tail(e)] && !maxcut[G.head(e)]) max_min_cut_value+=c;49 if (mincut[G.source(e)] && !mincut[G.target(e)]) min_min_cut_value+=c; 50 if (cut[G.source(e)] && !cut[G.target(e)]) min_cut_value+=c; 51 if (maxcut[G.source(e)] && !maxcut[G.target(e)]) max_min_cut_value+=c; 52 52 } 53 53 … … 87 87 for(G.first(e); G.valid(e); G.next(e)) { 88 88 int c=cap[e]; 89 if (mincut2[G. tail(e)] && !mincut2[G.head(e)]) min_min_cut2_value+=c;90 if (cut2[G. tail(e)] && !cut2[G.head(e)]) min_cut2_value+=c;91 if (maxcut2[G. tail(e)] && !maxcut2[G.head(e)]) max_min_cut2_value+=c;89 if (mincut2[G.source(e)] && !mincut2[G.target(e)]) min_min_cut2_value+=c; 90 if (cut2[G.source(e)] && !cut2[G.target(e)]) min_cut2_value+=c; 91 if (maxcut2[G.source(e)] && !maxcut2[G.target(e)]) max_min_cut2_value+=c; 92 92 } 93 93 … … 139 139 for(G.first(e); G.valid(e); G.next(e)) { 140 140 int c=cap[e]; 141 if (mincut3[G. tail(e)] && !mincut3[G.head(e)]) min_min_cut3_value+=c;142 if (cut3[G. tail(e)] && !cut3[G.head(e)]) min_cut3_value+=c;143 if (maxcut3[G. tail(e)] && !maxcut3[G.head(e)]) max_min_cut3_value+=c;144 if (actcut3[G. tail(e)] && !actcut3[G.head(e)]) act_min_cut3_value+=c;141 if (mincut3[G.source(e)] && !mincut3[G.target(e)]) min_min_cut3_value+=c; 142 if (cut3[G.source(e)] && !cut3[G.target(e)]) min_cut3_value+=c; 143 if (maxcut3[G.source(e)] && !maxcut3[G.target(e)]) max_min_cut3_value+=c; 144 if (actcut3[G.source(e)] && !actcut3[G.target(e)]) act_min_cut3_value+=c; 145 145 } 146 146 … … 196 196 for(G.first(e); G.valid(e); G.next(e)) { 197 197 int c=cap[e]; 198 if (mincut4[G. tail(e)] && !mincut4[G.head(e)]) min_min_cut4_value+=c;199 if (cut4[G. tail(e)] && !cut4[G.head(e)]) min_cut4_value+=c;200 if (maxcut4[G. tail(e)] && !maxcut4[G.head(e)]) max_min_cut4_value+=c;198 if (mincut4[G.source(e)] && !mincut4[G.target(e)]) min_min_cut4_value+=c; 199 if (cut4[G.source(e)] && !cut4[G.target(e)]) min_cut4_value+=c; 200 if (maxcut4[G.source(e)] && !maxcut4[G.target(e)]) max_min_cut4_value+=c; 201 201 } 202 202 … … 239 239 for(G.first(e); G.valid(e); G.next(e)) { 240 240 int c=cap[e]; 241 if (mincut5[G. tail(e)] && !mincut5[G.head(e)]) min_min_cut5_value+=c;242 if (cut5[G. tail(e)] && !cut5[G.head(e)]) min_cut5_value+=c;243 if (maxcut5[G. tail(e)] && !maxcut5[G.head(e)]) max_min_cut5_value+=c;241 if (mincut5[G.source(e)] && !mincut5[G.target(e)]) min_min_cut5_value+=c; 242 if (cut5[G.source(e)] && !cut5[G.target(e)]) min_cut5_value+=c; 243 if (maxcut5[G.source(e)] && !maxcut5[G.target(e)]) max_min_cut5_value+=c; 244 244 } 245 245 -
src/work/jacint/preflow_excess.h
r921 r986 137 137 InEdgeIt e; 138 138 for(G.first(e,v); G.valid(e); G.next(e)) { 139 Node w=G. tail(e);139 Node w=G.source(e); 140 140 if ( level[w] == n && w != s ) { 141 141 bfs_queue.push(w); … … 155 155 T c=capacity[e]; 156 156 if ( c == 0 ) continue; 157 Node w=G. head(e);157 Node w=G.target(e); 158 158 if ( level[w] < n ) { 159 159 if ( excess[w] == 0 && w!=t ) active[level[w]].push(w); … … 183 183 for(G.first(e,v); G.valid(e); G.next(e)) { 184 184 if ( capacity[e] == flow[e] ) continue; 185 Node w=G. tail(e);185 Node w=G.source(e); 186 186 if ( level[w] == n && w != s ) { 187 187 bfs_queue.push(w); … … 197 197 for(G.first(f,v); G.valid(f); G.next(f)) { 198 198 if ( 0 == flow[f] ) continue; 199 Node w=G. head(f);199 Node w=G.target(f); 200 200 if ( level[w] == n && w != s ) { 201 201 bfs_queue.push(w); … … 248 248 T rem=capacity[e]-flow[e]; 249 249 if ( rem == 0 ) continue; 250 Node w=G. head(e);250 Node w=G.target(e); 251 251 if ( level[w] < n ) { 252 252 if ( excess[w] == 0 && w!=t ) active[level[w]].push(w); … … 260 260 { 261 261 if ( flow[f] == 0 ) continue; 262 Node w=G. tail(f);262 Node w=G.source(f); 263 263 if ( level[w] < n ) { 264 264 if ( excess[w] == 0 && w!=t ) active[level[w]].push(w); … … 304 304 for(G.first(e,v); G.valid(e); G.next(e)) { 305 305 if ( capacity[e] == flow[e] ) continue; 306 Node u=G. tail(e);306 Node u=G.source(e); 307 307 if ( level[u] >= n ) { 308 308 bfs_queue.push(u); … … 315 315 for(G.first(f,v); G.valid(f); G.next(f)) { 316 316 if ( 0 == flow[f] ) continue; 317 Node u=G. head(f);317 Node u=G.target(f); 318 318 if ( level[u] >= n ) { 319 319 bfs_queue.push(u); … … 344 344 345 345 if ( flow[e] == capacity[e] ) continue; 346 Node v=G. head(e);346 Node v=G.target(e); 347 347 //e=wv 348 348 … … 386 386 387 387 if( flow[e] == 0 ) continue; 388 Node v=G. tail(e);388 Node v=G.source(e); 389 389 //e=vw 390 390 … … 570 570 OutEdgeIt e; 571 571 for(G.first(e,w) ; G.valid(e); G.next(e)) { 572 Node v=G. head(e);572 Node v=G.target(e); 573 573 if (!M[v] && flow[e] < capacity[e] ) { 574 574 queue.push(v); … … 579 579 InEdgeIt f; 580 580 for(G.first(f,w) ; G.valid(f); G.next(f)) { 581 Node v=G. tail(f);581 Node v=G.source(f); 582 582 if (!M[v] && flow[f] > 0 ) { 583 583 queue.push(v); … … 610 610 InEdgeIt e; 611 611 for(G.first(e,w) ; G.valid(e); G.next(e)) { 612 Node v=G. tail(e);612 Node v=G.source(e); 613 613 if (!M[v] && flow[e] < capacity[e] ) { 614 614 queue.push(v); … … 619 619 OutEdgeIt f; 620 620 for(G.first(f,w) ; G.valid(f); G.next(f)) { 621 Node v=G. head(f);621 Node v=G.target(f); 622 622 if (!M[v] && flow[f] > 0 ) { 623 623 queue.push(v); -
src/work/jacint/preflow_excess_test.cc
r921 r986 53 53 EdgeIt e; 54 54 for(G.first(e); G.valid(e); G.next(e)) { 55 if (mincut[G. tail(e)] && !mincut[G.head(e)]) min_min_cut_value+=cap[e];55 if (mincut[G.source(e)] && !mincut[G.target(e)]) min_min_cut_value+=cap[e]; 56 56 } 57 57 … … 60 60 int min_cut_value=0; 61 61 for(G.first(e); G.valid(e); G.next(e)) { 62 if (cut[G. tail(e)] && !cut[G.head(e)])62 if (cut[G.source(e)] && !cut[G.target(e)]) 63 63 min_cut_value+=cap[e]; 64 64 } … … 68 68 int max_min_cut_value=0; 69 69 for(G.first(e); G.valid(e); G.next(e)) { 70 if (maxcut[G. tail(e)] && !maxcut[G.head(e)])70 if (maxcut[G.source(e)] && !maxcut[G.target(e)]) 71 71 max_min_cut_value+=cap[e]; 72 72 } … … 100 100 int min_min_cut_value2=0; 101 101 for(G.first(e); G.valid(e); G.next(e)) { 102 if (mincut2[G. tail(e)] && !mincut2[G.head(e)]) min_min_cut_value2+=cap[e];102 if (mincut2[G.source(e)] && !mincut2[G.target(e)]) min_min_cut_value2+=cap[e]; 103 103 } 104 104 … … 107 107 int min_cut_value2=0; 108 108 for(G.first(e); G.valid(e); G.next(e)) { 109 if (cut2[G. tail(e)] && !cut2[G.head(e)])109 if (cut2[G.source(e)] && !cut2[G.target(e)]) 110 110 min_cut_value2+=cap[e]; 111 111 } … … 115 115 int max_min_cut_value2=0; 116 116 for(G.first(e); G.valid(e); G.next(e)) { 117 if (maxcut2[G. tail(e)] && !maxcut2[G.head(e)])117 if (maxcut2[G.source(e)] && !maxcut2[G.target(e)]) 118 118 max_min_cut_value2+=cap[e]; 119 119 } … … 145 145 int min_min_cut_value3=0; 146 146 for(G.first(e); G.valid(e); G.next(e)) { 147 if (mincut3[G. tail(e)] && !mincut3[G.head(e)]) min_min_cut_value3+=cap[e];147 if (mincut3[G.source(e)] && !mincut3[G.target(e)]) min_min_cut_value3+=cap[e]; 148 148 } 149 149 … … 152 152 int min_cut_value3=0; 153 153 for(G.first(e); G.valid(e); G.next(e)) { 154 if (cut3[G. tail(e)] && !cut3[G.head(e)])154 if (cut3[G.source(e)] && !cut3[G.target(e)]) 155 155 min_cut_value3+=cap[e]; 156 156 } … … 160 160 int max_min_cut_value3=0; 161 161 for(G.first(e); G.valid(e); G.next(e)) { 162 if (maxcut3[G. tail(e)] && !maxcut3[G.head(e)])162 if (maxcut3[G.source(e)] && !maxcut3[G.target(e)]) 163 163 max_min_cut_value3+=cap[e]; 164 164 } -
src/work/jacint/preflow_res.h
r921 r986 103 103 for(res_graph.first(e,v); res_graph.valid(e); 104 104 res_graph.next(e)) { 105 Node w=res_graph. tail(e);105 Node w=res_graph.source(e); 106 106 if ( level[w] == n && w != s ) { 107 107 bfs_queue.push(w); … … 146 146 for(res_graph.first(e,s); res_graph.valid(e); 147 147 res_graph.next(e)) { 148 Node w=res_graph. head(e);148 Node w=res_graph.target(e); 149 149 if ( level[w] < n ) { 150 150 if ( excess[w] == 0 && w!=t ) { … … 191 191 for(res_graph.first(e,v); 192 192 res_graph.valid(e); res_graph.next(e)) { 193 Node u=res_graph. tail(e);193 Node u=res_graph.source(e); 194 194 if ( level[u] >= n ) { 195 195 bfs_queue.push(u); … … 222 222 for(res_graph.first(e,w); res_graph.valid(e); res_graph.next(e)) { 223 223 224 Node v=res_graph. head(e);224 Node v=res_graph.target(e); 225 225 if( lev > level[v] ) { 226 226 /*Push is allowed now*/ … … 401 401 OutEdgeIt e; 402 402 for(G.first(e,w) ; G.valid(e); G.next(e)) { 403 Node v=G. head(e);403 Node v=G.target(e); 404 404 if (!M[v] && flow[e] < capacity[e] ) { 405 405 queue.push(v); … … 410 410 InEdgeIt f; 411 411 for(G.first(f,w) ; G.valid(f); G.next(f)) { 412 Node v=G. tail(f);412 Node v=G.source(f); 413 413 if (!M[v] && flow[f] > 0 ) { 414 414 queue.push(v); … … 441 441 InEdgeIt e; 442 442 for(G.first(e,w) ; G.valid(e); G.next(e)) { 443 Node v=G. tail(e);443 Node v=G.source(e); 444 444 if (!M[v] && flow[e] < capacity[e] ) { 445 445 queue.push(v); … … 450 450 OutEdgeIt f; 451 451 for(G.first(f,w) ; G.valid(f); G.next(f)) { 452 Node v=G. head(f);452 Node v=G.target(f); 453 453 if (!M[v] && flow[f] > 0 ) { 454 454 queue.push(v); -
src/work/jacint/prim.h
r921 r986 96 96 OutEdgeIt e; 97 97 for( G.first(e,v); G.valid(e); G.next(e)) { 98 Node w=G. head(e);98 Node w=G.target(e); 99 99 100 100 if ( !scanned[w] ) { … … 112 112 InEdgeIt f; 113 113 for( G.first(f,v); G.valid(f); G.next(f)) { 114 Node w=G. tail(f);114 Node w=G.source(f); 115 115 116 116 if ( !scanned[w] ) {
Note: See TracChangeset
for help on using the changeset viewer.