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