src/work/marci/edmonds_karp_demo.cc
author beckerjc
Wed, 03 Mar 2004 19:14:27 +0000
changeset 149 824c0438020c
parent 144 a1323efc5753
child 155 8c6292ec54c6
permissions -rw-r--r--
Apr?bb jav?t?sok.
marci@73
     1
#include <iostream>
marci@73
     2
#include <fstream>
marci@73
     3
marci@73
     4
#include <list_graph.hh>
marci@73
     5
#include <dimacs.hh>
marci@73
     6
#include <edmonds_karp.hh>
marci@73
     7
#include <time_measure.h>
marci@73
     8
alpar@105
     9
using namespace hugo;
marci@73
    10
marci@73
    11
// Use a DIMACS max flow file as stdin.
marci@73
    12
// read_dimacs_demo < dimacs_max_flow_file
marci@139
    13
marci@139
    14
/*
marci@139
    15
  struct Ize {
marci@139
    16
  };
marci@139
    17
  
marci@139
    18
  struct Mize {
marci@139
    19
    Ize bumm;
marci@139
    20
  };
marci@139
    21
marci@139
    22
  template <typename B>
marci@139
    23
    class Huha {
marci@139
    24
    public:
marci@139
    25
      int u;
marci@139
    26
      B brr;
marci@139
    27
    };
marci@139
    28
*/
marci@139
    29
marci@73
    30
int main(int, char **) {
marci@73
    31
  typedef ListGraph::NodeIt NodeIt;
marci@73
    32
  typedef ListGraph::EachEdgeIt EachEdgeIt;
marci@73
    33
marci@139
    34
/*
marci@139
    35
  Mize mize[10];
marci@139
    36
  Mize bize[0];
marci@139
    37
  Mize zize;
marci@139
    38
  typedef Mize Tize[0];
marci@139
    39
marci@139
    40
  std::cout << &zize << " " << sizeof(mize) << sizeof(Tize) << std::endl;
marci@139
    41
  std::cout << sizeof(bize) << std::endl;
marci@139
    42
marci@139
    43
marci@139
    44
  Huha<Tize> k;
marci@139
    45
  std::cout << sizeof(k) << std::endl;
marci@146
    46
marci@146
    47
marci@146
    48
  struct Bumm {
marci@146
    49
    //int a;
marci@146
    50
    bool b;
marci@146
    51
  };
marci@146
    52
marci@146
    53
  std::cout << sizeof(Bumm) << std::endl;
marci@139
    54
*/
marci@139
    55
marci@73
    56
  ListGraph G;
marci@73
    57
  NodeIt s, t;
marci@73
    58
  ListGraph::EdgeMap<int> cap(G);
marci@73
    59
  readDimacsMaxFlow(std::cin, G, s, t, cap);
marci@73
    60
marci@133
    61
  {
marci@133
    62
  std::cout << "edmonds karp demo (blocking flow augmentation)..." << std::endl;
marci@73
    63
  ListGraph::EdgeMap<int> flow(G); //0 flow
marci@73
    64
marci@144
    65
  Timer ts;
marci@144
    66
  ts.reset();
marci@144
    67
  //double pre_time=currTime();
marci@73
    68
  MaxFlow<ListGraph, int, ListGraph::EdgeMap<int>, ListGraph::EdgeMap<int> > max_flow_test(G, s, t, flow, cap);
marci@133
    69
  //max_flow_test.augmentWithBlockingFlow<ListGraph>();
marci@138
    70
  int i=0;
marci@138
    71
  while (max_flow_test.augmentOnBlockingFlow<ListGraph>()) { ++i; }
marci@144
    72
  //double post_time=currTime();
marci@133
    73
marci@73
    74
  //std::cout << "maximum flow: "<< std::endl;
marci@73
    75
  //for(EachEdgeIt e=G.first<EachEdgeIt>(); e.valid(); ++e) { 
marci@73
    76
  //  std::cout<<"("<<G.tail(e)<< "-"<<flow.get(e)<<"->"<<G.head(e)<<") ";
marci@73
    77
  //}
marci@73
    78
  //std::cout<<std::endl;
marci@144
    79
  std::cout << "elapsed time: " << ts << std::endl;
marci@138
    80
  std::cout << "number of augmentation phases: " << i << std::endl; 
marci@73
    81
  std::cout << "flow value: "<< max_flow_test.flowValue() << std::endl;
marci@133
    82
  }
marci@133
    83
marci@133
    84
  {
marci@133
    85
  std::cout << "edmonds karp demo (shortest path augmentation)..." << std::endl;
marci@133
    86
  ListGraph::EdgeMap<int> flow(G); //0 flow
marci@133
    87
marci@144
    88
  Timer ts;
marci@144
    89
  ts.reset();
marci@144
    90
  //double pre_time=currTime();
marci@133
    91
  MaxFlow<ListGraph, int, ListGraph::EdgeMap<int>, ListGraph::EdgeMap<int> > max_flow_test(G, s, t, flow, cap);
marci@133
    92
  //max_flow_test.augmentWithBlockingFlow<ListGraph>();
marci@138
    93
  int i=0;
marci@138
    94
  while (max_flow_test.augmentOnShortestPath()) { ++i; }
marci@144
    95
  //double post_time=currTime();
marci@133
    96
marci@133
    97
  //std::cout << "maximum flow: "<< std::endl;
marci@133
    98
  //for(EachEdgeIt e=G.first<EachEdgeIt>(); e.valid(); ++e) { 
marci@133
    99
  //  std::cout<<"("<<G.tail(e)<< "-"<<flow.get(e)<<"->"<<G.head(e)<<") ";
marci@133
   100
  //}
marci@133
   101
  //std::cout<<std::endl;
marci@144
   102
  std::cout << "elapsed time: " << ts << std::endl;
marci@138
   103
  std::cout << "number of augmentation phases: " << i << std::endl; 
marci@133
   104
  std::cout << "flow value: "<< max_flow_test.flowValue() << std::endl;
marci@133
   105
  }
marci@73
   106
marci@73
   107
  return 0;
marci@73
   108
}