Skip to content

Commit 2862644

Browse files
Merge pull request #304 from sebrockm/fix-max-flows
Fix named parameter overload of `boykov_kolmogorov_max_flow`
2 parents fcfc152 + f62a183 commit 2862644

File tree

2 files changed

+23
-10
lines changed

2 files changed

+23
-10
lines changed

include/boost/graph/boykov_kolmogorov_max_flow.hpp

+1-2
Original file line numberDiff line numberDiff line change
@@ -1029,8 +1029,7 @@ boykov_kolmogorov_max_flow(Graph& g, CapacityEdgeMap cap,
10291029
* named-parameter version, some given
10301030
*/
10311031
template < class Graph, class P, class T, class R >
1032-
typename property_traits<
1033-
typename property_map< Graph, edge_capacity_t >::const_type >::value_type
1032+
typename detail::edge_capacity_value< Graph, P, T, R >::type
10341033
boykov_kolmogorov_max_flow(Graph& g,
10351034
typename graph_traits< Graph >::vertex_descriptor src,
10361035
typename graph_traits< Graph >::vertex_descriptor sink,

test/boykov_kolmogorov_max_flow_test.cpp

+22-8
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ fill_random_max_flow_graph(Graph& g, CapacityMap cap, ReverseEdgeMap rev,
7272
// cannot use this, as we have no idea how properties are stored, right?
7373
typename graph_traits< Graph >::edge_iterator ei, e_end;
7474
for (boost::tie(ei, e_end) = edges(g); ei != e_end; ++ei)
75-
cap[*ei] = int_gen();
75+
put(cap, *ei, int_gen());
7676

7777
// get source and sink node
7878
vertex_descriptor s = random_vertex(g, gen);
@@ -96,9 +96,9 @@ fill_random_max_flow_graph(Graph& g, CapacityMap cap, ReverseEdgeMap rev,
9696
boost::tie(new_edge, inserted)
9797
= add_edge(source_vertex, target_vertex, g);
9898
assert(inserted);
99-
rev[old_edge] = new_edge;
100-
rev[new_edge] = old_edge;
101-
cap[new_edge] = 0;
99+
put(rev, old_edge, new_edge);
100+
put(rev, new_edge, old_edge);
101+
put(cap, new_edge, 0);
102102
}
103103
return std::make_pair(s, t);
104104
}
@@ -188,10 +188,24 @@ long test_bundled_properties(int n_verts, int n_edges, std::size_t seed)
188188
boost::tie(src, sink)
189189
= fill_random_max_flow_graph(g, get(&tEdge::edge_capacity, g),
190190
get(&tEdge::edge_reverse, g), n_verts, n_edges, seed);
191-
return boykov_kolmogorov_max_flow(g, get(&tEdge::edge_capacity, g),
192-
get(&tEdge::edge_residual_capacity, g), get(&tEdge::edge_reverse, g),
193-
get(&tVertex::vertex_predecessor, g), get(&tVertex::vertex_color, g),
194-
get(&tVertex::vertex_distance, g), get(vertex_index, g), src, sink);
191+
192+
long flow_unnamed_overload = boykov_kolmogorov_max_flow(g,
193+
get(&tEdge::edge_capacity, g), get(&tEdge::edge_residual_capacity, g),
194+
get(&tEdge::edge_reverse, g), get(&tVertex::vertex_predecessor, g),
195+
get(&tVertex::vertex_color, g), get(&tVertex::vertex_distance, g),
196+
get(vertex_index, g), src, sink);
197+
198+
long flow_named_overload = boykov_kolmogorov_max_flow(g, src, sink,
199+
capacity_map(get(&tEdge::edge_capacity, g))
200+
.residual_capacity_map(get(&tEdge::edge_residual_capacity, g))
201+
.reverse_edge_map(get(&tEdge::edge_reverse, g))
202+
.predecessor_map(get(&tVertex::vertex_predecessor, g))
203+
.color_map(get(&tVertex::vertex_color, g))
204+
.distance_map(get(&tVertex::vertex_distance, g))
205+
.vertex_index_map(get(vertex_index, g)));
206+
207+
BOOST_TEST(flow_unnamed_overload == flow_named_overload);
208+
return flow_named_overload;
195209
}
196210

197211
long test_overloads(int n_verts, int n_edges, std::size_t seed)

0 commit comments

Comments
 (0)