29 Node s, t; |
30 Node s, t; |
30 Graph::EdgeMap<int> cap(G); |
31 Graph::EdgeMap<int> cap(G); |
31 std::ifstream ins(in.c_str()); |
32 std::ifstream ins(in.c_str()); |
32 readDimacsMaxFlow(ins, G, s, t, cap); |
33 readDimacsMaxFlow(ins, G, s, t, cap); |
33 |
34 |
|
35 Timer ts; |
|
36 Graph::EdgeMap<int> flow(G); //0 flow |
|
37 Preflow<Graph, int, Graph::EdgeMap<int>, Graph::EdgeMap<int> > |
|
38 pre_flow_test(G, s, t, cap, flow); |
|
39 MaxFlow<Graph, int, Graph::EdgeMap<int>, Graph::EdgeMap<int> > |
|
40 max_flow_test(G, s, t, cap, flow); |
|
41 |
|
42 std::cout << "ListGraph ..." << std::endl; |
|
43 |
34 { |
44 { |
35 std::cout << "ListGraph..." << std::endl; |
45 std::cout << "preflow ..." << std::endl; |
36 std::cout << "edmonds karp demo (physical blocking flow augmentation)..." << std::endl; |
46 ts.reset(); |
37 Graph::EdgeMap<int> flow(G); //0 flow |
47 pre_flow_test.run(); |
|
48 std::cout << "elapsed time: " << ts << std::endl; |
|
49 std::cout << "flow value: "<< pre_flow_test.flowValue() << std::endl; |
|
50 } |
38 |
51 |
39 Timer ts; |
52 { |
|
53 std::cout << "physical blocking flow augmentation ..." << std::endl; |
|
54 FOR_EACH_LOC(Graph::EdgeIt, e, G) flow.set(e, 0); |
40 ts.reset(); |
55 ts.reset(); |
41 |
|
42 MaxFlow<Graph, int, Graph::EdgeMap<int>, Graph::EdgeMap<int> > max_flow_test(G, s, t, flow, cap); |
|
43 int i=0; |
56 int i=0; |
44 while (max_flow_test.augmentOnBlockingFlow<MutableGraph>()) { ++i; } |
57 while (max_flow_test.augmentOnBlockingFlow<MutableGraph>()) { ++i; } |
45 |
|
46 std::cout << "elapsed time: " << ts << std::endl; |
58 std::cout << "elapsed time: " << ts << std::endl; |
47 std::cout << "number of augmentation phases: " << i << std::endl; |
59 std::cout << "number of augmentation phases: " << i << std::endl; |
48 std::cout << "flow value: "<< max_flow_test.flowValue() << std::endl; |
60 std::cout << "flow value: "<< max_flow_test.flowValue() << std::endl; |
49 } |
61 } |
50 |
62 |
51 { |
63 { |
52 std::cout << "edmonds karp demo (on-the-fly blocking flow augmentation)..." << std::endl; |
64 std::cout << "faster physical blocking flow augmentation ..." << std::endl; |
53 Graph::EdgeMap<int> flow(G); //0 flow |
65 FOR_EACH_LOC(Graph::EdgeIt, e, G) flow.set(e, 0); |
54 |
|
55 Timer ts; |
|
56 ts.reset(); |
66 ts.reset(); |
57 |
|
58 MaxFlow<Graph, int, Graph::EdgeMap<int>, Graph::EdgeMap<int> > max_flow_test(G, s, t, flow, cap); |
|
59 int i=0; |
67 int i=0; |
60 while (max_flow_test.augmentOnBlockingFlow2()) { ++i; } |
68 while (max_flow_test.augmentOnBlockingFlow1<MutableGraph>()) { ++i; } |
61 |
|
62 std::cout << "elapsed time: " << ts << std::endl; |
69 std::cout << "elapsed time: " << ts << std::endl; |
63 std::cout << "number of augmentation phases: " << i << std::endl; |
70 std::cout << "number of augmentation phases: " << i << std::endl; |
64 std::cout << "flow value: "<< max_flow_test.flowValue() << std::endl; |
71 std::cout << "flow value: "<< max_flow_test.flowValue() << std::endl; |
65 } |
72 } |
66 |
73 |
67 { |
74 { |
68 std::cout << "edmonds karp demo (on-the-fly shortest path augmentation)..." << std::endl; |
75 std::cout << "on-the-fly blocking flow augmentation ..." << std::endl; |
69 Graph::EdgeMap<int> flow(G); //0 flow |
76 FOR_EACH_LOC(Graph::EdgeIt, e, G) flow.set(e, 0); |
|
77 ts.reset(); |
|
78 int i=0; |
|
79 while (max_flow_test.augmentOnBlockingFlow2()) { ++i; } |
|
80 std::cout << "elapsed time: " << ts << std::endl; |
|
81 std::cout << "number of augmentation phases: " << i << std::endl; |
|
82 std::cout << "flow value: "<< max_flow_test.flowValue() << std::endl; |
|
83 } |
70 |
84 |
71 Timer ts; |
85 { |
|
86 std::cout << "on-the-fly shortest path augmentation ..." << std::endl; |
|
87 FOR_EACH_LOC(Graph::EdgeIt, e, G) flow.set(e, 0); |
72 ts.reset(); |
88 ts.reset(); |
73 |
|
74 MaxFlow<Graph, int, Graph::EdgeMap<int>, Graph::EdgeMap<int> > max_flow_test(G, s, t, flow, cap); |
|
75 int i=0; |
89 int i=0; |
76 while (max_flow_test.augmentOnShortestPath()) { ++i; } |
90 while (max_flow_test.augmentOnShortestPath()) { ++i; } |
77 |
|
78 std::cout << "elapsed time: " << ts << std::endl; |
91 std::cout << "elapsed time: " << ts << std::endl; |
79 std::cout << "number of augmentation phases: " << i << std::endl; |
92 std::cout << "number of augmentation phases: " << i << std::endl; |
80 std::cout << "flow value: "<< max_flow_test.flowValue() << std::endl; |
93 std::cout << "flow value: "<< max_flow_test.flowValue() << std::endl; |
81 } |
94 } |
82 } |
95 } |
91 Node s, t; |
104 Node s, t; |
92 Graph::EdgeMap<int> cap(G); |
105 Graph::EdgeMap<int> cap(G); |
93 std::ifstream ins(in.c_str()); |
106 std::ifstream ins(in.c_str()); |
94 readDimacsMaxFlow(ins, G, s, t, cap); |
107 readDimacsMaxFlow(ins, G, s, t, cap); |
95 |
108 |
|
109 Timer ts; |
|
110 Graph::EdgeMap<int> flow(G); //0 flow |
|
111 Preflow<Graph, int, Graph::EdgeMap<int>, Graph::EdgeMap<int> > |
|
112 pre_flow_test(G, s, t, cap, flow); |
|
113 MaxFlow<Graph, int, Graph::EdgeMap<int>, Graph::EdgeMap<int> > |
|
114 max_flow_test(G, s, t, cap, flow); |
|
115 |
|
116 std::cout << "SmatrGraph ..." << std::endl; |
|
117 |
96 { |
118 { |
97 std::cout << "SmartGraph..." << std::endl; |
119 std::cout << "preflow ..." << std::endl; |
98 std::cout << "edmonds karp demo (physical blocking flow augmentation)..." << std::endl; |
120 FOR_EACH_LOC(Graph::EdgeIt, e, G) flow.set(e, 0); |
99 Graph::EdgeMap<int> flow(G); //0 flow |
121 ts.reset(); |
|
122 pre_flow_test.run(); |
|
123 std::cout << "elapsed time: " << ts << std::endl; |
|
124 std::cout << "flow value: "<< pre_flow_test.flowValue() << std::endl; |
|
125 } |
100 |
126 |
101 Timer ts; |
127 { |
|
128 std::cout << "physical blocking flow augmentation ..." << std::endl; |
|
129 FOR_EACH_LOC(Graph::EdgeIt, e, G) flow.set(e, 0); |
102 ts.reset(); |
130 ts.reset(); |
103 |
|
104 MaxFlow<Graph, int, Graph::EdgeMap<int>, Graph::EdgeMap<int> > max_flow_test(G, s, t, flow, cap); |
|
105 int i=0; |
131 int i=0; |
106 while (max_flow_test.augmentOnBlockingFlow<MutableGraph>()) { ++i; } |
132 while (max_flow_test.augmentOnBlockingFlow<MutableGraph>()) { ++i; } |
107 |
|
108 std::cout << "elapsed time: " << ts << std::endl; |
133 std::cout << "elapsed time: " << ts << std::endl; |
109 std::cout << "number of augmentation phases: " << i << std::endl; |
134 std::cout << "number of augmentation phases: " << i << std::endl; |
110 std::cout << "flow value: "<< max_flow_test.flowValue() << std::endl; |
135 std::cout << "flow value: "<< max_flow_test.flowValue() << std::endl; |
111 } |
136 } |
112 |
137 |
113 { |
138 { |
114 std::cout << "edmonds karp demo (on-the-fly blocking flow augmentation)..." << std::endl; |
139 std::cout << "faster physical blocking flow augmentation ..." << std::endl; |
115 Graph::EdgeMap<int> flow(G); //0 flow |
140 FOR_EACH_LOC(Graph::EdgeIt, e, G) flow.set(e, 0); |
116 |
|
117 Timer ts; |
|
118 ts.reset(); |
141 ts.reset(); |
119 |
|
120 MaxFlow<Graph, int, Graph::EdgeMap<int>, Graph::EdgeMap<int> > max_flow_test(G, s, t, flow, cap); |
|
121 int i=0; |
142 int i=0; |
122 while (max_flow_test.augmentOnBlockingFlow2()) { ++i; } |
143 while (max_flow_test.augmentOnBlockingFlow1<MutableGraph>()) { ++i; } |
123 |
|
124 std::cout << "elapsed time: " << ts << std::endl; |
144 std::cout << "elapsed time: " << ts << std::endl; |
125 std::cout << "number of augmentation phases: " << i << std::endl; |
145 std::cout << "number of augmentation phases: " << i << std::endl; |
126 std::cout << "flow value: "<< max_flow_test.flowValue() << std::endl; |
146 std::cout << "flow value: "<< max_flow_test.flowValue() << std::endl; |
127 } |
147 } |
128 |
148 |
129 { |
149 { |
130 std::cout << "edmonds karp demo (on-the-fly shortest path augmentation)..." << std::endl; |
150 std::cout << "on-the-fly blocking flow augmentation ..." << std::endl; |
131 Graph::EdgeMap<int> flow(G); //0 flow |
151 FOR_EACH_LOC(Graph::EdgeIt, e, G) flow.set(e, 0); |
|
152 ts.reset(); |
|
153 int i=0; |
|
154 while (max_flow_test.augmentOnBlockingFlow2()) { ++i; } |
|
155 std::cout << "elapsed time: " << ts << std::endl; |
|
156 std::cout << "number of augmentation phases: " << i << std::endl; |
|
157 std::cout << "flow value: "<< max_flow_test.flowValue() << std::endl; |
|
158 } |
132 |
159 |
133 Timer ts; |
160 { |
|
161 std::cout << "on-the-fly shortest path augmentation ..." << std::endl; |
|
162 FOR_EACH_LOC(Graph::EdgeIt, e, G) flow.set(e, 0); |
134 ts.reset(); |
163 ts.reset(); |
135 |
|
136 MaxFlow<Graph, int, Graph::EdgeMap<int>, Graph::EdgeMap<int> > max_flow_test(G, s, t, flow, cap); |
|
137 int i=0; |
164 int i=0; |
138 while (max_flow_test.augmentOnShortestPath()) { ++i; } |
165 while (max_flow_test.augmentOnShortestPath()) { ++i; } |
139 |
|
140 std::cout << "elapsed time: " << ts << std::endl; |
166 std::cout << "elapsed time: " << ts << std::endl; |
141 std::cout << "number of augmentation phases: " << i << std::endl; |
167 std::cout << "number of augmentation phases: " << i << std::endl; |
142 std::cout << "flow value: "<< max_flow_test.flowValue() << std::endl; |
168 std::cout << "flow value: "<< max_flow_test.flowValue() << std::endl; |
143 } |
169 } |
144 } |
170 } |
145 |
171 |
|
172 |
|
173 |
|
174 |
146 return 0; |
175 return 0; |
147 } |
176 } |