marci@773: // -*- c++ -*-
marci@773: 
marci@777: // Use a DIMACS max flow file as follows:
marci@777: // graph_wrapper_time dimacs_max_flow_file
marci@777: 
marci@773: #include <iostream>
marci@773: #include <fstream>
marci@773: #include <string>
marci@773: #include <vector>
marci@773: #include <hugo/invalid.h>
marci@773: #include <hugo/time_measure.h>
marci@773: #include <hugo/graph_wrapper.h>
marci@773: #include <hugo/max_flow.h>
marci@773: #include <hugo/dimacs.h>
marci@773: #include <hugo/list_graph.h>
marci@773: 
marci@773: using namespace hugo;
marci@773: 
marci@773: using std::cout;
marci@773: using std::endl;
marci@773: 
marci@773: template<typename Graph>
marci@773: void timeTest(std::string str, Graph& g) {
marci@773:   g.clear();
marci@773:   typename Graph::Node s;
marci@773:   typename Graph::Node t;
marci@773:   typedef typename Graph::template EdgeMap<int> FlowMap;
marci@773:   FlowMap cap(g);
marci@773:   FlowMap flow(g);
marci@773:   std::ifstream is(str.c_str());
marci@773:   readDimacs(is, g, cap, s, t);
marci@773:   Timer ts;
marci@773:   ts.reset();
marci@777: 
marci@773:   typedef MaxFlow<Graph, int, FlowMap, FlowMap> MyMaxFlow;
marci@773:   MyMaxFlow max_flow(g, s, t, cap, flow);
marci@773:   max_flow.run(MyMaxFlow::NO_FLOW);
marci@784:   cout << "flow value: " << max_flow.flowValue() << endl;
marci@773:   cout << ts << endl;
marci@773: }
marci@773: 
marci@773: int main(int, char** argv) {
marci@773:    std::string in=argv[1];
marci@773: 
marci@773:   typedef ListGraph Graph; 
marci@773:   Graph g;
marci@773:   timeTest<Graph>(in, g);
marci@773:   typedef GraphWrapper<Graph> Graph1;
marci@773:   Graph1 g1(g);
marci@773:   timeTest<Graph1>(in, g1);
marci@773:   typedef GraphWrapper<Graph1> Graph2;
marci@773:   Graph2 g2(g1);
marci@773:   timeTest<Graph2>(in, g2);
marci@773:   typedef GraphWrapper<Graph2> Graph3;
marci@773:   Graph3 g3(g2);
marci@773:   timeTest<Graph3>(in, g3);
marci@777:   typedef GraphWrapper<Graph3> Graph4;
marci@777:   Graph4 g4(g3);
marci@777:   timeTest<Graph4>(in, g4);
marci@777:   typedef GraphWrapper<Graph4> Graph5;
marci@777:   Graph5 g5(g4);
marci@777:   timeTest<Graph5>(in, g5);
marci@777:   typedef GraphWrapper<Graph5> Graph6;
marci@777:   Graph6 g6(g5);
marci@777:   timeTest<Graph6>(in, g6);  
marci@777:   typedef GraphWrapper<Graph6> Graph7;
marci@777:   Graph7 g7(g6);
marci@777:   timeTest<Graph7>(in, g7);
marci@773: 
marci@773:   return 0;
marci@773: }