src/work/marci/preflow_demo_boost.cc
author deba
Wed, 08 Sep 2004 12:06:45 +0000 (2004-09-08)
changeset 822 88226d9fe821
permissions -rw-r--r--
The MapFactories have been removed from the code because
if we use macros then they increases only the complexity.

The pair iterators of the maps are separeted from the maps.

Some macros and comments has been changed.
marci@73
     1
#include <iostream>
marci@73
     2
#include <string>
marci@73
     3
marci@73
     4
#include <boost/config.hpp>
marci@73
     5
#include <boost/graph/push_relabel_max_flow.hpp>
marci@73
     6
#include <boost/graph/adjacency_list.hpp>
marci@73
     7
#include <boost/graph/read_dimacs.hpp>
marci@73
     8
#include <boost/graph/graph_utility.hpp>
marci@73
     9
marci@73
    10
#include <time_measure.h>
marci@73
    11
marci@73
    12
// Use a DIMACS network flow file as stdin.
marci@73
    13
// max_flow < max_flow.dat
marci@73
    14
int main()
marci@73
    15
{
marci@73
    16
  using namespace boost;
marci@73
    17
marci@73
    18
  typedef adjacency_list_traits<vecS, vecS, directedS> Traits;
marci@73
    19
  typedef adjacency_list<listS, vecS, directedS, 
marci@73
    20
    property<vertex_name_t, std::string>,
marci@73
    21
    property<edge_capacity_t, long,
marci@73
    22
      property<edge_residual_capacity_t, long,
marci@73
    23
        property<edge_reverse_t, Traits::edge_descriptor> > >
marci@73
    24
  > Graph;
marci@73
    25
marci@73
    26
  Graph g;
marci@73
    27
marci@73
    28
  property_map<Graph, edge_capacity_t>::type 
marci@73
    29
    capacity = get(edge_capacity, g);
marci@73
    30
  property_map<Graph, edge_reverse_t>::type 
marci@73
    31
    rev = get(edge_reverse, g);
marci@73
    32
  property_map<Graph, edge_residual_capacity_t>::type 
marci@73
    33
    residual_capacity = get(edge_residual_capacity, g);
marci@73
    34
marci@73
    35
  Traits::vertex_descriptor s, t;
marci@73
    36
  read_dimacs_max_flow(g, capacity, rev, s, t);
marci@73
    37
marci@73
    38
  std::cout << "preflow demo (BOOST)..." << endl;
marci@73
    39
  double pre_time=currTime();
marci@73
    40
  long flow = push_relabel_max_flow(g, s, t);
marci@73
    41
  double post_time=currTime();
marci@73
    42
marci@73
    43
  //std::cout << "maximum flow: " << std::endl;
marci@73
    44
  //graph_traits<Graph>::vertex_iterator u_iter, u_end;
marci@73
    45
  //graph_traits<Graph>::out_edge_iterator ei, e_end;
marci@73
    46
  //for (tie(u_iter, u_end) = vertices(g); u_iter != u_end; ++u_iter)
marci@73
    47
  //  for (tie(ei, e_end) = out_edges(*u_iter, g); ei != e_end; ++ei)
marci@73
    48
  //    if (capacity[*ei] > 0)
marci@73
    49
  //      std::cout << "f " << *u_iter << " " << target(*ei, g) << " " 
marci@73
    50
  //                << (capacity[*ei] - residual_capacity[*ei]) << std::endl;
marci@73
    51
  //
marci@73
    52
  //std::cout << std::endl;
marci@73
    53
  std::cout << "elapsed time: " << post_time-pre_time << " sec"<< std::endl; 
marci@73
    54
  std::cout << "flow value: " << flow << std::endl;
marci@73
    55
  
marci@73
    56
  return 0;
marci@73
    57
}