Do not ignore INSTALL.
     6 #include <sage_graph.h>
 
     7 #include <hugo/list_graph.h>
 
     8 #include <hugo/smart_graph.h>
 
     9 #include <hugo/dimacs.h>
 
    11 #include <hugo/time_measure.h>
 
    12 #include <hugo/for_each_macros.h>
 
    16 // Use a DIMACS max flow file as stdin.
 
    17 // read_dimacs_demo dimacs_max_flow_file
 
    19 int main(int, char** argv) {
 
    21   std::string in=argv[1];
 
    22   typedef SageGraph MutableGraph;
 
    25     typedef SageGraph Graph;
 
    26     typedef Graph::Node Node;
 
    27     typedef Graph::EdgeIt EdgeIt;
 
    31     Graph::EdgeMap<int> cap(g);
 
    32     std::ifstream ins(in.c_str());
 
    33     //readDimacsMaxFlow(ins, g, s, t, cap);
 
    34     readDimacs(ins, g, cap, s, t);
 
    37     Graph::EdgeMap<int> flow(g); //0 flow
 
    38     MaxFlow<Graph, int, Graph::EdgeMap<int>, Graph::EdgeMap<int> > 
 
    39       max_flow_test(g, s, t, cap, flow/*, true*/);
 
    41     std::cout << "SageGraph ..." << std::endl;
 
    44       std::cout << "preflow ..." << std::endl;
 
    47       std::cout << "elapsed time: " << ts << std::endl;
 
    48       std::cout << "flow value: "<< max_flow_test.flowValue() << std::endl;
 
    52       std::cout << "physical blocking flow augmentation ..." << std::endl;
 
    53       FOR_EACH_LOC(Graph::EdgeIt, e, g) flow.set(e, 0);
 
    56       while (max_flow_test.augmentOnBlockingFlow<MutableGraph>()) { ++i; }
 
    57       std::cout << "elapsed time: " << ts << std::endl;
 
    58       std::cout << "number of augmentation phases: " << i << std::endl; 
 
    59       std::cout << "flow value: "<< max_flow_test.flowValue() << std::endl;
 
    63 //       std::cout << "faster physical blocking flow augmentation ..." << std::endl;
 
    64 //       FOR_EACH_LOC(Graph::EdgeIt, e, g) flow.set(e, 0);
 
    67 //       while (max_flow_test.augmentOnBlockingFlow1<MutableGraph>()) { ++i; }
 
    68 //       std::cout << "elapsed time: " << ts << std::endl;
 
    69 //       std::cout << "number of augmentation phases: " << i << std::endl; 
 
    70 //       std::cout << "flow value: "<< max_flow_test.flowValue() << std::endl;
 
    74       std::cout << "on-the-fly blocking flow augmentation ..." << std::endl;
 
    75       FOR_EACH_LOC(Graph::EdgeIt, e, g) flow.set(e, 0);
 
    78       while (max_flow_test.augmentOnBlockingFlow2()) { ++i; }
 
    79       std::cout << "elapsed time: " << ts << std::endl;
 
    80       std::cout << "number of augmentation phases: " << i << std::endl; 
 
    81       std::cout << "flow value: "<< max_flow_test.flowValue() << std::endl;
 
    85       std::cout << "on-the-fly shortest path augmentation ..." << std::endl;
 
    86       FOR_EACH_LOC(Graph::EdgeIt, e, g) flow.set(e, 0);
 
    89       while (max_flow_test.augmentOnShortestPath()) { ++i; }
 
    90       std::cout << "elapsed time: " << ts << std::endl;
 
    91       std::cout << "number of augmentation phases: " << i << std::endl; 
 
    92       std::cout << "flow value: "<< max_flow_test.flowValue() << std::endl;
 
    97     typedef SmartGraph Graph;
 
    98     typedef Graph::Node Node;
 
    99     typedef Graph::EdgeIt EdgeIt;
 
   103     Graph::EdgeMap<int> cap(g);
 
   104     std::ifstream ins(in.c_str());
 
   105     //readDimacsMaxFlow(ins, g, s, t, cap);
 
   106     readDimacs(ins, g, cap, s, t);
 
   109     Graph::EdgeMap<int> flow(g); //0 flow
 
   110     MaxFlow<Graph, int, Graph::EdgeMap<int>, Graph::EdgeMap<int> > 
 
   111       max_flow_test(g, s, t, cap, flow/*, true*/);
 
   112     //    MaxFlow<Graph, int, Graph::EdgeMap<int>, Graph::EdgeMap<int> > 
 
   113     //  max_flow_test(g, s, t, cap, flow);
 
   115     std::cout << "SmartGraph ..." << std::endl;
 
   118       std::cout << "preflow ..." << std::endl;
 
   119       FOR_EACH_LOC(Graph::EdgeIt, e, g) flow.set(e, 0);
 
   122       std::cout << "elapsed time: " << ts << std::endl;
 
   123       std::cout << "flow value: "<< max_flow_test.flowValue() << std::endl;
 
   127       std::cout << "physical blocking flow augmentation ..." << std::endl;
 
   128       FOR_EACH_LOC(Graph::EdgeIt, e, g) flow.set(e, 0);
 
   131       while (max_flow_test.augmentOnBlockingFlow<MutableGraph>()) { ++i; }
 
   132       std::cout << "elapsed time: " << ts << std::endl;
 
   133       std::cout << "number of augmentation phases: " << i << std::endl; 
 
   134       std::cout << "flow value: "<< max_flow_test.flowValue() << std::endl;
 
   138 //       std::cout << "faster physical blocking flow augmentation ..." << std::endl;
 
   139 //       FOR_EACH_LOC(Graph::EdgeIt, e, g) flow.set(e, 0);
 
   142 //       while (max_flow_test.augmentOnBlockingFlow1<MutableGraph>()) { ++i; }
 
   143 //       std::cout << "elapsed time: " << ts << std::endl;
 
   144 //       std::cout << "number of augmentation phases: " << i << std::endl; 
 
   145 //       std::cout << "flow value: "<< max_flow_test.flowValue() << std::endl;
 
   149       std::cout << "on-the-fly blocking flow augmentation ..." << std::endl;
 
   150       FOR_EACH_LOC(Graph::EdgeIt, e, g) flow.set(e, 0);
 
   153       while (max_flow_test.augmentOnBlockingFlow2()) { ++i; }
 
   154       std::cout << "elapsed time: " << ts << std::endl;
 
   155       std::cout << "number of augmentation phases: " << i << std::endl; 
 
   156       std::cout << "flow value: "<< max_flow_test.flowValue() << std::endl;
 
   160       std::cout << "on-the-fly shortest path augmentation ..." << std::endl;
 
   161       FOR_EACH_LOC(Graph::EdgeIt, e, g) flow.set(e, 0);
 
   164       while (max_flow_test.augmentOnShortestPath()) { ++i; }
 
   165       std::cout << "elapsed time: " << ts << std::endl;
 
   166       std::cout << "number of augmentation phases: " << i << std::endl; 
 
   167       std::cout << "flow value: "<< max_flow_test.flowValue() << std::endl;
 
   172     typedef ListGraph Graph;
 
   173     typedef Graph::Node Node;
 
   174     typedef Graph::EdgeIt EdgeIt;
 
   178     Graph::EdgeMap<int> cap(g);
 
   179     std::ifstream ins(in.c_str());
 
   180     //readDimacsMaxFlow(ins, g, s, t, cap);
 
   181     readDimacs(ins, g, cap, s, t);
 
   184     Graph::EdgeMap<int> flow(g); //0 flow
 
   185     MaxFlow<Graph, int, Graph::EdgeMap<int>, Graph::EdgeMap<int> > 
 
   186       max_flow_test(g, s, t, cap, flow/*, true*/);
 
   187     //    MaxFlow<Graph, int, Graph::EdgeMap<int>, Graph::EdgeMap<int> > 
 
   188     //  max_flow_test(g, s, t, cap, flow);
 
   190     std::cout << "ListGraph ..." << std::endl;
 
   193       std::cout << "preflow ..." << std::endl;
 
   194       FOR_EACH_LOC(Graph::EdgeIt, e, g) flow.set(e, 0);
 
   197       std::cout << "elapsed time: " << ts << std::endl;
 
   198       std::cout << "flow value: "<< max_flow_test.flowValue() << std::endl;
 
   202       std::cout << "physical blocking flow augmentation ..." << std::endl;
 
   203       FOR_EACH_LOC(Graph::EdgeIt, e, g) flow.set(e, 0);
 
   206       while (max_flow_test.augmentOnBlockingFlow<MutableGraph>()) { ++i; }
 
   207       std::cout << "elapsed time: " << ts << std::endl;
 
   208       std::cout << "number of augmentation phases: " << i << std::endl; 
 
   209       std::cout << "flow value: "<< max_flow_test.flowValue() << std::endl;
 
   213 //       std::cout << "faster physical blocking flow augmentation ..." << std::endl;
 
   214 //       FOR_EACH_LOC(Graph::EdgeIt, e, g) flow.set(e, 0);
 
   217 //       while (max_flow_test.augmentOnBlockingFlow1<MutableGraph>()) { ++i; }
 
   218 //       std::cout << "elapsed time: " << ts << std::endl;
 
   219 //       std::cout << "number of augmentation phases: " << i << std::endl; 
 
   220 //       std::cout << "flow value: "<< max_flow_test.flowValue() << std::endl;
 
   224       std::cout << "on-the-fly blocking flow augmentation ..." << std::endl;
 
   225       FOR_EACH_LOC(Graph::EdgeIt, e, g) flow.set(e, 0);
 
   228       while (max_flow_test.augmentOnBlockingFlow2()) { ++i; }
 
   229       std::cout << "elapsed time: " << ts << std::endl;
 
   230       std::cout << "number of augmentation phases: " << i << std::endl; 
 
   231       std::cout << "flow value: "<< max_flow_test.flowValue() << std::endl;
 
   235       std::cout << "on-the-fly shortest path augmentation ..." << std::endl;
 
   236       FOR_EACH_LOC(Graph::EdgeIt, e, g) flow.set(e, 0);
 
   239       while (max_flow_test.augmentOnShortestPath()) { ++i; }
 
   240       std::cout << "elapsed time: " << ts << std::endl;
 
   241       std::cout << "number of augmentation phases: " << i << std::endl; 
 
   242       std::cout << "flow value: "<< max_flow_test.flowValue() << std::endl;