inline OutputIterator kruskal_minimum_spanning_tree(const Graph& g, OutputIterator spanning_tree_edges, const bgl_named_params<P, T, R>& params) { typedef typename graph_traits<Graph>::vertices_size_type size_type; typedef typename graph_traits<Graph>::vertex_descriptor vertex_t; if (num_vertices(g) == 0) return spanning_tree_edges; // Nothing to do in this case typename graph_traits<Graph>::vertices_size_type n; n = is_default_param(get_param(params, vertex_rank)) ? num_vertices(g) : 1; std::vector<size_type> rank_map(n); n = is_default_param(get_param(params, vertex_predecessor)) ? num_vertices(g) : 1; std::vector<vertex_t> pred_map(n); return detail::kruskal_mst_impl (g, spanning_tree_edges, choose_param (get_param(params, vertex_rank), make_iterator_property_map (rank_map.begin(), choose_pmap(get_param(params, vertex_index), g, vertex_index), rank_map[0])), choose_param (get_param(params, vertex_predecessor), make_iterator_property_map (pred_map.begin(), choose_const_pmap(get_param(params, vertex_index), g, vertex_index), pred_map[0])), choose_const_pmap(get_param(params, edge_weight), g, edge_weight)); }
inline void kruskal_minimum_spanning_tree(const Graph& g, OutputIterator spanning_tree_edges) { typedef typename graph_traits<Graph>::vertices_size_type size_type; typedef typename graph_traits<Graph>::vertex_descriptor vertex_t; if (num_vertices(g) == 0) return; // Nothing to do in this case typename graph_traits<Graph>::vertices_size_type n = num_vertices(g); std::vector<size_type> rank_map(n); std::vector<vertex_t> pred_map(n); detail::kruskal_mst_impl (g, spanning_tree_edges, make_iterator_property_map(rank_map.begin(), get(vertex_index, g), rank_map[0]), make_iterator_property_map(pred_map.begin(), get(vertex_index, g), pred_map[0]), get(edge_weight, g)); }