From 5cc0fa180fffa536219265c317c553e6dda388a3 Mon Sep 17 00:00:00 2001 From: Jeremy Siek Date: Sun, 22 Apr 2001 21:41:51 +0000 Subject: [PATCH] cleaned up a bit [SVN r9878] --- .../boost/graph/kruskal_min_spanning_tree.hpp | 113 ++++++++---------- 1 file changed, 51 insertions(+), 62 deletions(-) diff --git a/include/boost/graph/kruskal_min_spanning_tree.hpp b/include/boost/graph/kruskal_min_spanning_tree.hpp index 88073a24..eb98283e 100644 --- a/include/boost/graph/kruskal_min_spanning_tree.hpp +++ b/include/boost/graph/kruskal_min_spanning_tree.hpp @@ -54,69 +54,59 @@ namespace boost { // set of edges. // - // Variant (1) - template - inline void - kruskal_minimum_spanning_tree(const Graph& G, - OutputIterator spanning_tree_edges, - Rank rank, Parent parent) - { - typedef typename graph_traits::edge_descriptor Edge; - kruskal_minimum_spanning_tree(G, spanning_tree_edges, rank, parent, - get(edge_weight, G)); - } + namespace detail { - // Variant (2) - template - void - kruskal_minimum_spanning_tree(const Graph& G, - OutputIterator spanning_tree_edges, - Rank rank, Parent parent, Weight weight) - { - typedef typename graph_traits::vertex_descriptor Vertex; - typedef typename graph_traits::edge_descriptor Edge; - function_requires >(); - function_requires >(); - function_requires >(); - function_requires >(); - function_requires >(); - typedef typename property_traits::value_type W_value; - typedef typename property_traits::value_type R_value; - typedef typename property_traits::value_type P_value; - function_requires >(); - function_requires >(); - function_requires >(); + template + void + kruskal_mst_impl(const Graph& G, + OutputIterator spanning_tree_edges, + Rank rank, Parent parent, Weight weight) + { + typedef typename graph_traits::vertex_descriptor Vertex; + typedef typename graph_traits::edge_descriptor Edge; + function_requires >(); + function_requires >(); + function_requires >(); + function_requires >(); + function_requires >(); + typedef typename property_traits::value_type W_value; + typedef typename property_traits::value_type R_value; + typedef typename property_traits::value_type P_value; + function_requires >(); + function_requires >(); + function_requires >(); - disjoint_sets dset(rank, parent); - - typename graph_traits::vertex_iterator ui, uiend; - for (boost::tie(ui, uiend) = vertices(G); ui != uiend; ++ui) - dset.make_set(*ui); + disjoint_sets dset(rank, parent); - typedef indirect_cmp > weight_greater; - weight_greater wl(weight); - std::priority_queue, weight_greater> Q(wl); - /*push all edge into Q*/ - typename graph_traits::edge_iterator ei, eiend; - for (boost::tie(ei, eiend) = edges(G); ei != eiend; ++ei) - Q.push(*ei); - - while (! Q.empty()) { - Edge e = Q.top(); - Q.pop(); - Vertex u = dset.find_set(source(e, G)); - Vertex v = dset.find_set(target(e, G)); - if ( u != v ) { - *spanning_tree_edges++ = e; - dset.link(u, v); + typename graph_traits::vertex_iterator ui, uiend; + for (boost::tie(ui, uiend) = vertices(G); ui != uiend; ++ui) + dset.make_set(*ui); + + typedef indirect_cmp > weight_greater; + weight_greater wl(weight); + std::priority_queue, weight_greater> Q(wl); + /*push all edge into Q*/ + typename graph_traits::edge_iterator ei, eiend; + for (boost::tie(ei, eiend) = edges(G); ei != eiend; ++ei) + Q.push(*ei); + + while (! Q.empty()) { + Edge e = Q.top(); + Q.pop(); + Vertex u = dset.find_set(source(e, G)); + Vertex v = dset.find_set(target(e, G)); + if ( u != v ) { + *spanning_tree_edges++ = e; + dset.link(u, v); + } } } - } + + } // namespace detail // Named Parameters Variants - // (1) + template inline void kruskal_minimum_spanning_tree(const Graph& g, @@ -130,14 +120,13 @@ namespace boost { std::vector rank_map(n); std::vector pred_map(n); - kruskal_minimum_spanning_tree + detail::kruskal_mst_impl (g, spanning_tree_edges, make_iterator_property_map(rank_map.begin(), get(vertex_index, g)), make_iterator_property_map(pred_map.begin(), get(vertex_index, g)), get(edge_weight, g)); } - // (2) template inline void kruskal_minimum_spanning_tree(const Graph& g, @@ -154,7 +143,7 @@ namespace boost { ? num_vertices(g) : 0; std::vector pred_map(n); - kruskal_minimum_spanning_tree + detail::kruskal_mst_impl (g, spanning_tree_edges, choose_param (get_param(params, vertex_rank), @@ -164,9 +153,9 @@ namespace boost { choose_param (get_param(params, vertex_predecessor), make_iterator_property_map - (predecessor_map.begin(), - choose_pmap(get_param(params, vertex_index), g, vertex_index))), - choose_pmap(get_param(params, edge_weight), g, edge_weight)); + (pred_map.begin(), + choose_const_pmap(get_param(params, vertex_index), g, vertex_index))), + choose_const_pmap(get_param(params, edge_weight), g, edge_weight)); } } // namespace boost