6 #include <list_graph.h>
7 #include <smart_graph.h>
9 #include <edmonds_karp.h>
10 #include <time_measure.h>
11 #include <graph_wrapper.h>
15 // Use a DIMACS max flow file as stdin.
16 // read_dimacs_demo dimacs_max_flow_file
18 int main(int, char** argv) {
20 std::string in=argv[1];
21 typedef ListGraph MutableGraph;
24 typedef ListGraph Graph;
25 typedef Graph::Node Node;
26 typedef Graph::EdgeIt EdgeIt;
30 Graph::EdgeMap<int> cap(G);
31 std::ifstream ins(in.c_str());
32 readDimacsMaxFlow(ins, G, s, t, cap);
35 std::cout << "ListGraph..." << std::endl;
36 std::cout << "edmonds karp demo (physical blocking flow augmentation)..." << std::endl;
37 Graph::EdgeMap<int> flow(G); //0 flow
42 MaxFlow<Graph, int, Graph::EdgeMap<int>, Graph::EdgeMap<int> > max_flow_test(G, s, t, flow, cap);
44 while (max_flow_test.augmentOnBlockingFlow<MutableGraph>()) { ++i; }
46 std::cout << "elapsed time: " << ts << std::endl;
47 std::cout << "number of augmentation phases: " << i << std::endl;
48 std::cout << "flow value: "<< max_flow_test.flowValue() << std::endl;
52 std::cout << "edmonds karp demo (on-the-fly blocking flow augmentation)..." << std::endl;
53 Graph::EdgeMap<int> flow(G); //0 flow
58 MaxFlow<Graph, int, Graph::EdgeMap<int>, Graph::EdgeMap<int> > max_flow_test(G, s, t, flow, cap);
60 while (max_flow_test.augmentOnBlockingFlow2()) { ++i; }
62 std::cout << "elapsed time: " << ts << std::endl;
63 std::cout << "number of augmentation phases: " << i << std::endl;
64 std::cout << "flow value: "<< max_flow_test.flowValue() << std::endl;
68 std::cout << "edmonds karp demo (on-the-fly shortest path augmentation)..." << std::endl;
69 Graph::EdgeMap<int> flow(G); //0 flow
74 MaxFlow<Graph, int, Graph::EdgeMap<int>, Graph::EdgeMap<int> > max_flow_test(G, s, t, flow, cap);
76 while (max_flow_test.augmentOnShortestPath()) { ++i; }
78 std::cout << "elapsed time: " << ts << std::endl;
79 std::cout << "number of augmentation phases: " << i << std::endl;
80 std::cout << "flow value: "<< max_flow_test.flowValue() << std::endl;
86 typedef SmartGraph Graph;
87 typedef Graph::Node Node;
88 typedef Graph::EdgeIt EdgeIt;
92 Graph::EdgeMap<int> cap(G);
93 std::ifstream ins(in.c_str());
94 readDimacsMaxFlow(ins, G, s, t, cap);
97 std::cout << "SmartGraph..." << std::endl;
98 std::cout << "edmonds karp demo (physical blocking flow augmentation)..." << std::endl;
99 Graph::EdgeMap<int> flow(G); //0 flow
104 MaxFlow<Graph, int, Graph::EdgeMap<int>, Graph::EdgeMap<int> > max_flow_test(G, s, t, flow, cap);
106 while (max_flow_test.augmentOnBlockingFlow<MutableGraph>()) { ++i; }
108 std::cout << "elapsed time: " << ts << std::endl;
109 std::cout << "number of augmentation phases: " << i << std::endl;
110 std::cout << "flow value: "<< max_flow_test.flowValue() << std::endl;
114 std::cout << "edmonds karp demo (on-the-fly blocking flow augmentation)..." << std::endl;
115 Graph::EdgeMap<int> flow(G); //0 flow
120 MaxFlow<Graph, int, Graph::EdgeMap<int>, Graph::EdgeMap<int> > max_flow_test(G, s, t, flow, cap);
122 while (max_flow_test.augmentOnBlockingFlow2()) { ++i; }
124 std::cout << "elapsed time: " << ts << std::endl;
125 std::cout << "number of augmentation phases: " << i << std::endl;
126 std::cout << "flow value: "<< max_flow_test.flowValue() << std::endl;
130 std::cout << "edmonds karp demo (on-the-fly shortest path augmentation)..." << std::endl;
131 Graph::EdgeMap<int> flow(G); //0 flow
136 MaxFlow<Graph, int, Graph::EdgeMap<int>, Graph::EdgeMap<int> > max_flow_test(G, s, t, flow, cap);
138 while (max_flow_test.augmentOnShortestPath()) { ++i; }
140 std::cout << "elapsed time: " << ts << std::endl;
141 std::cout << "number of augmentation phases: " << i << std::endl;
142 std::cout << "flow value: "<< max_flow_test.flowValue() << std::endl;