COIN-OR::LEMON - Graph Library

Ignore:
Timestamp:
08/31/04 19:54:22 (20 years ago)
Author:
marci
Branch:
default
Phase:
public
Convert:
svn:c9d7d8f5-90d6-0310-b91f-818b3a526b0e/lemon/trunk@1070
Message:

graph_wrapper.h is ready for hugo 0.2

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/work/marci/augmenting_flow.h

    r775 r777  
    1212#include <hugo/invalid.h>
    1313#include <hugo/maps.h>
    14 #include <for_each_macros.h>
     14//#include <for_each_macros.h>
    1515
    1616/// \file
     
    10831083    Num flowValue() const {
    10841084      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];
    10871087      return a;
    10881088      //marci figyu: excess[t] epp ezt adja preflow 1. fazisa utan   
     
    11221122
    11231123    //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);
    11251125    BfsIterator<ResGW, ReachedMap> bfs(res_graph, level);
    11261126    bfs.pushAndSetReached(s);
     
    11331133    //searching for augmenting path
    11341134    while ( !bfs.finished() ) {
    1135       ResGWOutEdgeIt e=bfs;
     1135      ResGWEdge e=bfs;
    11361136      if (e!=INVALID && bfs.isBNodeNewlyReached()) {
    11371137        Node v=res_graph.tail(e);
     
    11701170
    11711171    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);
    11731173      number_of_augmentations=1;
    11741174    } else {
     
    11901190    //searching for augmenting path
    11911191    while ( !bfs.finished() ) {
    1192       ResGWOutEdgeIt e=bfs;
     1192      ResGWEdge e=bfs;
    11931193      if (e!=INVALID && bfs.isBNodeNewlyReached()) {
    11941194        Node v=res_graph.tail(e);
     
    12321232    //bfs for distances on the residual graph
    12331233    //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);
    12351235    BfsIterator<ResGW, ReachedMap> bfs(res_graph, level);
    12361236    bfs.pushAndSetReached(s);
     
    12561256
    12571257    while ( !bfs.finished() ) {
    1258       ResGWOutEdgeIt e=bfs;
     1258      ResGWEdge e=bfs;
    12591259      if (e!=INVALID) {
    12601260        if (bfs.isBNodeNewlyReached()) {
     
    12971297        if (F.valid(/*typename MG::OutEdgeIt*/(dfs))) {
    12981298          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);
    13011301            pred.set(w, dfs);
    13021302            if (pred[v]!=INVALID) {
     
    13461346
    13471347    //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);
    13491349    BfsIterator<ResGW, ReachedMap> bfs(res_graph, level);
    13501350
     
    13521352    DistanceMap<ResGW> dist(res_graph);
    13531353    while ( !bfs.finished() ) {
    1354       ResGWOutEdgeIt e=bfs;
     1354      ResGWEdge e=bfs;
    13551355      if (e!=INVALID && bfs.isBNodeNewlyReached()) {
    13561356        dist.set(res_graph.head(e), dist[res_graph.tail(e)]+1);
     
    13591359    } //computing distances from s in the residual graph
    13601360
    1361       //Subgraph containing the edges on some shortest paths
     1361    //Subgraph containing the edges on some shortest paths
    13621362    ConstMap<typename ResGW::Node, bool> true_map(true);
    13631363    typedef SubGraphWrapper<ResGW, ConstMap<typename ResGW::Node, bool>,
     
    13671367    //Subgraph, which is able to delete edges which are already
    13681368    //met by the dfs
    1369     typename FilterResGW::template NodeMap<typename FilterResGW::OutEdgeIt>
     1369    typename FilterResGW::template NodeMap<typename FilterResGW::Edge>
    13701370      first_out_edges(filter_res_graph);
    13711371    typename FilterResGW::NodeIt v;
    13721372    for(filter_res_graph.first(v); v!=INVALID; ++v)
    13731373      {
    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);
    13771377      }
    13781378    typedef ErasingFirstGraphWrapper<FilterResGW, typename FilterResGW::
    1379       template NodeMap<typename FilterResGW::OutEdgeIt> > ErasingResGW;
     1379      template NodeMap<typename FilterResGW::Edge> > ErasingResGW;
    13801380    ErasingResGW erasing_res_graph(filter_res_graph, first_out_edges);
    13811381
     
    13901390        dfs(erasing_res_graph);
    13911391      typename ErasingResGW::
    1392         template NodeMap<typename ErasingResGW::OutEdgeIt>
    1393         pred(erasing_res_graph);
     1392        template NodeMap<typename ErasingResGW::Edge> pred(erasing_res_graph);
    13941393      pred.set(s, INVALID);
    13951394      //invalid iterators for sources
     
    13991398
    14001399      dfs.pushAndSetReached
    1401         ///\bug hugo 0.2
     1400        /// \bug hugo 0.2
    14021401        (typename ErasingResGW::Node
    14031402         (typename FilterResGW::Node
     
    14061405          )
    14071406         );
     1407       
    14081408      while (!dfs.finished()) {
    14091409        ++dfs;
    1410         if (erasing_res_graph.valid(typename ErasingResGW::OutEdgeIt(dfs)))
     1410        if (typename ErasingResGW::Edge(dfs)!=INVALID)
    14111411          {
    14121412            if (dfs.isBNodeNewlyReached()) {
    14131413
    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));
    14181418              if (pred[v]!=INVALID) {
    14191419                free1.set
    14201420                  (w, std::min(free1[v], res_graph.resCap
    1421                                (typename ErasingResGW::OutEdgeIt(dfs))));
     1421                               (typename ErasingResGW::Edge(dfs))));
    14221422              } else {
    14231423                free1.set
    14241424                  (w, res_graph.resCap
    1425                    (typename ErasingResGW::OutEdgeIt(dfs)));
     1425                   (typename ErasingResGW::Edge(dfs)));
    14261426              }
    14271427
     
    14501450        //        Num j2=a2[b2];
    14511451        Num augment_value=free1[n];
    1452         while (erasing_res_graph.valid(pred[n])) {
    1453           typename ErasingResGW::OutEdgeIt e=pred[n];
     1452        while (pred[n]!=INVALID) {
     1453          typename ErasingResGW::Edge e=pred[n];
    14541454          res_graph.augment(e, augment_value);
    14551455          n=erasing_res_graph.tail(e);
Note: See TracChangeset for help on using the changeset viewer.