101 // cout << "bfs and dfs iterator demo on the directed graph" << endl; |
101 // cout << "bfs and dfs iterator demo on the directed graph" << endl; |
102 // for(NodeIt n=G.first<NodeIt>(); G.valid(n); G.next(n)) { |
102 // for(NodeIt n=G.first<NodeIt>(); G.valid(n); G.next(n)) { |
103 // cout << G.id(n) << ": "; |
103 // cout << G.id(n) << ": "; |
104 // cout << "out edges: "; |
104 // cout << "out edges: "; |
105 // for(OutEdgeIt e=G.first<OutEdgeIt>(n); G.valid(e); G.next(e)) |
105 // for(OutEdgeIt e=G.first<OutEdgeIt>(n); G.valid(e); G.next(e)) |
106 // cout << G.id(G.tail(e)) << "->" << G.id(G.head(e)) << " "; |
106 // cout << G.id(G.source(e)) << "->" << G.id(G.target(e)) << " "; |
107 // cout << "in edges: "; |
107 // cout << "in edges: "; |
108 // for(InEdgeIt e=G.first<InEdgeIt>(n); G.valid(e); G.next(e)) |
108 // for(InEdgeIt e=G.first<InEdgeIt>(n); G.valid(e); G.next(e)) |
109 // cout << G.id(G.tail(e)) << "->" << G.id(G.head(e)) << " "; |
109 // cout << G.id(G.source(e)) << "->" << G.id(G.target(e)) << " "; |
110 // cout << endl; |
110 // cout << endl; |
111 // } |
111 // } |
112 |
112 |
113 |
113 |
114 { |
114 { |
121 |
121 |
122 MaxMatching<Graph, int, Graph::EdgeMap<int>, Graph::EdgeMap<int> > max_flow_test(G, s_map, t_map, flow, cap); |
122 MaxMatching<Graph, int, Graph::EdgeMap<int>, Graph::EdgeMap<int> > max_flow_test(G, s_map, t_map, flow, cap); |
123 int i=0; |
123 int i=0; |
124 while (max_flow_test.augmentOnShortestPath()) { |
124 while (max_flow_test.augmentOnShortestPath()) { |
125 // for(EdgeIt e=G.first<EdgeIt>(); G.valid(e); G.next(e)) |
125 // for(EdgeIt e=G.first<EdgeIt>(); G.valid(e); G.next(e)) |
126 // std::cout << G.id(G.tail(e)) << "-" << flow.get(e) << "->" << G.id(G.head(e)) << " "; |
126 // std::cout << G.id(G.source(e)) << "-" << flow.get(e) << "->" << G.id(G.target(e)) << " "; |
127 // std::cout<<std::endl; |
127 // std::cout<<std::endl; |
128 ++i; |
128 ++i; |
129 } |
129 } |
130 |
130 |
131 // std::cout << "maximum matching: "<< std::endl; |
131 // std::cout << "maximum matching: "<< std::endl; |
132 // for(EdgeIt e=G.first<EdgeIt>(); G.valid(e); G.next(e)) |
132 // for(EdgeIt e=G.first<EdgeIt>(); G.valid(e); G.next(e)) |
133 // if (flow.get(e)) |
133 // if (flow.get(e)) |
134 // std::cout << G.id(G.tail(e)) << "-" << flow.get(e) << "->" << G.id(G.head(e)) << " "; |
134 // std::cout << G.id(G.source(e)) << "-" << flow.get(e) << "->" << G.id(G.target(e)) << " "; |
135 // std::cout<<std::endl; |
135 // std::cout<<std::endl; |
136 // std::cout << "edges which are not in this maximum matching: "<< std::endl; |
136 // std::cout << "edges which are not in this maximum matching: "<< std::endl; |
137 // for(EdgeIt e=G.first<EdgeIt>(); G.valid(e); G.next(e)) |
137 // for(EdgeIt e=G.first<EdgeIt>(); G.valid(e); G.next(e)) |
138 // if (!flow.get(e)) |
138 // if (!flow.get(e)) |
139 // std::cout << G.id(G.tail(e)) << "-" << flow.get(e) << "->" << G.id(G.head(e)) << " "; |
139 // std::cout << G.id(G.source(e)) << "-" << flow.get(e) << "->" << G.id(G.target(e)) << " "; |
140 // std::cout<<std::endl; |
140 // std::cout<<std::endl; |
141 |
141 |
142 std::cout << "elapsed time: " << ts << std::endl; |
142 std::cout << "elapsed time: " << ts << std::endl; |
143 std::cout << "number of augmentation phases: " << i << std::endl; |
143 std::cout << "number of augmentation phases: " << i << std::endl; |
144 std::cout << "flow value: "<< max_flow_test.flowValue() << std::endl; |
144 std::cout << "flow value: "<< max_flow_test.flowValue() << std::endl; |
154 |
154 |
155 // MaxMatching<Graph, int, Graph::EdgeMap<int>, Graph::EdgeMap<int> > max_flow_test(G, s_map, t_map, flow, cap); |
155 // MaxMatching<Graph, int, Graph::EdgeMap<int>, Graph::EdgeMap<int> > max_flow_test(G, s_map, t_map, flow, cap); |
156 // int i=0; |
156 // int i=0; |
157 // while (max_flow_test.augmentOnBlockingFlow2()) { |
157 // while (max_flow_test.augmentOnBlockingFlow2()) { |
158 // // for(EdgeIt e=G.first<EdgeIt>(); G.valid(e); G.next(e)) |
158 // // for(EdgeIt e=G.first<EdgeIt>(); G.valid(e); G.next(e)) |
159 // // std::cout << G.id(G.tail(e)) << "-" << flow.get(e) << "->" << G.id(G.head(e)) << " "; |
159 // // std::cout << G.id(G.source(e)) << "-" << flow.get(e) << "->" << G.id(G.target(e)) << " "; |
160 // // std::cout<<std::endl; |
160 // // std::cout<<std::endl; |
161 // ++i; |
161 // ++i; |
162 // } |
162 // } |
163 |
163 |
164 // // std::cout << "maximum matching: "<< std::endl; |
164 // // std::cout << "maximum matching: "<< std::endl; |
165 // // for(EdgeIt e=G.first<EdgeIt>(); G.valid(e); G.next(e)) |
165 // // for(EdgeIt e=G.first<EdgeIt>(); G.valid(e); G.next(e)) |
166 // // if (flow.get(e)) |
166 // // if (flow.get(e)) |
167 // // std::cout << G.id(G.tail(e)) << "-" << flow.get(e) << "->" << G.id(G.head(e)) << " "; |
167 // // std::cout << G.id(G.source(e)) << "-" << flow.get(e) << "->" << G.id(G.target(e)) << " "; |
168 // // std::cout<<std::endl; |
168 // // std::cout<<std::endl; |
169 // // std::cout << "edges which are not in this maximum matching: "<< std::endl; |
169 // // std::cout << "edges which are not in this maximum matching: "<< std::endl; |
170 // // for(EdgeIt e=G.first<EdgeIt>(); G.valid(e); G.next(e)) |
170 // // for(EdgeIt e=G.first<EdgeIt>(); G.valid(e); G.next(e)) |
171 // // if (!flow.get(e)) |
171 // // if (!flow.get(e)) |
172 // // std::cout << G.id(G.tail(e)) << "-" << flow.get(e) << "->" << G.id(G.head(e)) << " "; |
172 // // std::cout << G.id(G.source(e)) << "-" << flow.get(e) << "->" << G.id(G.target(e)) << " "; |
173 // // std::cout<<std::endl; |
173 // // std::cout<<std::endl; |
174 |
174 |
175 // std::cout << "elapsed time: " << ts << std::endl; |
175 // std::cout << "elapsed time: " << ts << std::endl; |
176 // std::cout << "number of augmentation phases: " << i << std::endl; |
176 // std::cout << "number of augmentation phases: " << i << std::endl; |
177 // std::cout << "flow value: "<< max_flow_test.flowValue() << std::endl; |
177 // std::cout << "flow value: "<< max_flow_test.flowValue() << std::endl; |
196 |
196 |
197 |
197 |
198 // std::cout << "maximum matching: "<< std::endl; |
198 // std::cout << "maximum matching: "<< std::endl; |
199 // for(EdgeIt e=G.first<EdgeIt>(); G.valid(e); G.next(e)) |
199 // for(EdgeIt e=G.first<EdgeIt>(); G.valid(e); G.next(e)) |
200 // if (flow.get(e)) |
200 // if (flow.get(e)) |
201 // std::cout << G.id(G.tail(e)) << "-" << flow.get(e) << "->" << G.id(G.head(e)) << " "; |
201 // std::cout << G.id(G.source(e)) << "-" << flow.get(e) << "->" << G.id(G.target(e)) << " "; |
202 // std::cout<<std::endl; |
202 // std::cout<<std::endl; |
203 // std::cout << "edges which are not in this maximum matching: "<< std::endl; |
203 // std::cout << "edges which are not in this maximum matching: "<< std::endl; |
204 // for(EdgeIt e=G.first<EdgeIt>(); G.valid(e); G.next(e)) |
204 // for(EdgeIt e=G.first<EdgeIt>(); G.valid(e); G.next(e)) |
205 // if (!flow.get(e)) |
205 // if (!flow.get(e)) |
206 // std::cout << G.id(G.tail(e)) << "-" << flow.get(e) << "->" << G.id(G.head(e)) << " "; |
206 // std::cout << G.id(G.source(e)) << "-" << flow.get(e) << "->" << G.id(G.target(e)) << " "; |
207 // std::cout<<std::endl; |
207 // std::cout<<std::endl; |
208 |
208 |
209 |
209 |
210 std::cout << "elapsed time: " << ts << std::endl; |
210 std::cout << "elapsed time: " << ts << std::endl; |
211 //std::cout << "number of augmentation phases: " << i << std::endl; |
211 //std::cout << "number of augmentation phases: " << i << std::endl; |