Changeset 777:a82713ed19f3 in lemon-0.x for src/work/marci/augmenting_flow.h
- Timestamp:
- 08/31/04 19:54:22 (20 years ago)
- Branch:
- default
- Phase:
- public
- Convert:
- svn:c9d7d8f5-90d6-0310-b91f-818b3a526b0e/lemon/trunk@1070
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/work/marci/augmenting_flow.h
r775 r777 12 12 #include <hugo/invalid.h> 13 13 #include <hugo/maps.h> 14 #include <for_each_macros.h>14 //#include <for_each_macros.h> 15 15 16 16 /// \file … … 1083 1083 Num flowValue() const { 1084 1084 Num a=0; 1085 FOR_EACH_INC_LOC(InEdgeIt, e, *g, t) a+=(*flow)[e];1086 FOR_EACH_INC_LOC(OutEdgeIt, e, *g, t) a-=(*flow)[e];1085 for (InEdgeIt e(*g, t); e!=INVALID; ++e) a+=(*flow)[e]; 1086 for (OutEdgeIt e(*g, t); e!=INVALID; ++e) a-=(*flow)[e]; 1087 1087 return a; 1088 1088 //marci figyu: excess[t] epp ezt adja preflow 1. fazisa utan … … 1122 1122 1123 1123 //ReachedMap level(res_graph); 1124 FOR_EACH_LOC(typename Graph::NodeIt, e, *g) level.set(e, 0);1124 for (typename Graph::NodeIt n(*g); n!=INVALID; ++n) level.set(n, 0); 1125 1125 BfsIterator<ResGW, ReachedMap> bfs(res_graph, level); 1126 1126 bfs.pushAndSetReached(s); … … 1133 1133 //searching for augmenting path 1134 1134 while ( !bfs.finished() ) { 1135 ResGW OutEdgeIte=bfs;1135 ResGWEdge e=bfs; 1136 1136 if (e!=INVALID && bfs.isBNodeNewlyReached()) { 1137 1137 Node v=res_graph.tail(e); … … 1170 1170 1171 1171 if (status!=AFTER_FAST_AUGMENTING) { 1172 FOR_EACH_LOC(typename Graph::NodeIt, e, *g) level.set(e, 0);1172 for (typename Graph::NodeIt n(*g); n!=INVALID; ++n) level.set(n, 0); 1173 1173 number_of_augmentations=1; 1174 1174 } else { … … 1190 1190 //searching for augmenting path 1191 1191 while ( !bfs.finished() ) { 1192 ResGW OutEdgeIte=bfs;1192 ResGWEdge e=bfs; 1193 1193 if (e!=INVALID && bfs.isBNodeNewlyReached()) { 1194 1194 Node v=res_graph.tail(e); … … 1232 1232 //bfs for distances on the residual graph 1233 1233 //ReachedMap level(res_graph); 1234 FOR_EACH_LOC(typename Graph::NodeIt, e, *g) level.set(e, 0);1234 for (typename Graph::NodeIt n(*g); n!=INVALID; ++n) level.set(n, 0); 1235 1235 BfsIterator<ResGW, ReachedMap> bfs(res_graph, level); 1236 1236 bfs.pushAndSetReached(s); … … 1256 1256 1257 1257 while ( !bfs.finished() ) { 1258 ResGW OutEdgeIte=bfs;1258 ResGWEdge e=bfs; 1259 1259 if (e!=INVALID) { 1260 1260 if (bfs.isBNodeNewlyReached()) { … … 1297 1297 if (F.valid(/*typename MG::OutEdgeIt*/(dfs))) { 1298 1298 if (dfs.isBNodeNewlyReached()) { 1299 typename MG::Node v=F. aNode(dfs);1300 typename MG::Node w=F. bNode(dfs);1299 typename MG::Node v=F.tail(dfs); 1300 typename MG::Node w=F.head(dfs); 1301 1301 pred.set(w, dfs); 1302 1302 if (pred[v]!=INVALID) { … … 1346 1346 1347 1347 //ReachedMap level(res_graph); 1348 FOR_EACH_LOC(typename Graph::NodeIt, e, *g) level.set(e, 0);1348 for (typename Graph::NodeIt n(*g); n!=INVALID; ++n) level.set(n, 0); 1349 1349 BfsIterator<ResGW, ReachedMap> bfs(res_graph, level); 1350 1350 … … 1352 1352 DistanceMap<ResGW> dist(res_graph); 1353 1353 while ( !bfs.finished() ) { 1354 ResGW OutEdgeIte=bfs;1354 ResGWEdge e=bfs; 1355 1355 if (e!=INVALID && bfs.isBNodeNewlyReached()) { 1356 1356 dist.set(res_graph.head(e), dist[res_graph.tail(e)]+1); … … 1359 1359 } //computing distances from s in the residual graph 1360 1360 1361 1361 //Subgraph containing the edges on some shortest paths 1362 1362 ConstMap<typename ResGW::Node, bool> true_map(true); 1363 1363 typedef SubGraphWrapper<ResGW, ConstMap<typename ResGW::Node, bool>, … … 1367 1367 //Subgraph, which is able to delete edges which are already 1368 1368 //met by the dfs 1369 typename FilterResGW::template NodeMap<typename FilterResGW:: OutEdgeIt>1369 typename FilterResGW::template NodeMap<typename FilterResGW::Edge> 1370 1370 first_out_edges(filter_res_graph); 1371 1371 typename FilterResGW::NodeIt v; 1372 1372 for(filter_res_graph.first(v); v!=INVALID; ++v) 1373 1373 { 1374 typename FilterResGW::OutEdgeIt e;1375 filter_res_graph.first(e, v);1376 first_out_edges.set(v, e);1374 typename FilterResGW::OutEdgeIt e; 1375 filter_res_graph.first(e, v); 1376 first_out_edges.set(v, e); 1377 1377 } 1378 1378 typedef ErasingFirstGraphWrapper<FilterResGW, typename FilterResGW:: 1379 template NodeMap<typename FilterResGW:: OutEdgeIt> > ErasingResGW;1379 template NodeMap<typename FilterResGW::Edge> > ErasingResGW; 1380 1380 ErasingResGW erasing_res_graph(filter_res_graph, first_out_edges); 1381 1381 … … 1390 1390 dfs(erasing_res_graph); 1391 1391 typename ErasingResGW:: 1392 template NodeMap<typename ErasingResGW::OutEdgeIt> 1393 pred(erasing_res_graph); 1392 template NodeMap<typename ErasingResGW::Edge> pred(erasing_res_graph); 1394 1393 pred.set(s, INVALID); 1395 1394 //invalid iterators for sources … … 1399 1398 1400 1399 dfs.pushAndSetReached 1401 /// \bug hugo 0.21400 /// \bug hugo 0.2 1402 1401 (typename ErasingResGW::Node 1403 1402 (typename FilterResGW::Node … … 1406 1405 ) 1407 1406 ); 1407 1408 1408 while (!dfs.finished()) { 1409 1409 ++dfs; 1410 if ( erasing_res_graph.valid(typename ErasingResGW::OutEdgeIt(dfs)))1410 if (typename ErasingResGW::Edge(dfs)!=INVALID) 1411 1411 { 1412 1412 if (dfs.isBNodeNewlyReached()) { 1413 1413 1414 typename ErasingResGW::Node v=erasing_res_graph. aNode(dfs);1415 typename ErasingResGW::Node w=erasing_res_graph. bNode(dfs);1416 1417 pred.set(w, /*typename ErasingResGW::OutEdgeIt*/(dfs));1414 typename ErasingResGW::Node v=erasing_res_graph.tail(dfs); 1415 typename ErasingResGW::Node w=erasing_res_graph.head(dfs); 1416 1417 pred.set(w, typename ErasingResGW::Edge(dfs)); 1418 1418 if (pred[v]!=INVALID) { 1419 1419 free1.set 1420 1420 (w, std::min(free1[v], res_graph.resCap 1421 (typename ErasingResGW:: OutEdgeIt(dfs))));1421 (typename ErasingResGW::Edge(dfs)))); 1422 1422 } else { 1423 1423 free1.set 1424 1424 (w, res_graph.resCap 1425 (typename ErasingResGW:: OutEdgeIt(dfs)));1425 (typename ErasingResGW::Edge(dfs))); 1426 1426 } 1427 1427 … … 1450 1450 // Num j2=a2[b2]; 1451 1451 Num augment_value=free1[n]; 1452 while ( erasing_res_graph.valid(pred[n])) {1453 typename ErasingResGW:: OutEdgeIte=pred[n];1452 while (pred[n]!=INVALID) { 1453 typename ErasingResGW::Edge e=pred[n]; 1454 1454 res_graph.augment(e, augment_value); 1455 1455 n=erasing_res_graph.tail(e);
Note: See TracChangeset
for help on using the changeset viewer.