图论学习(三)求最小生成树

xiaoxiao2021-02-27  155

1.方法一使用kruskal算法求最小生成树

思路 (1)新建一个存放边的容器std::vector < Edge > spanning_tree; (2)调用 kruskal_minimum_spanning_tree将边放入容器中

#include <boost/graph/adjacency_list.hpp> #include <boost/graph/kruskal_min_spanning_tree.hpp> #include <iostream> int main() { using namespace boost; typedef adjacency_list < vecS, vecS, undirectedS,no_property, property < edge_weight_t, int > > Graph; typedef graph_traits < Graph >::edge_descriptor Edge; typedef std::pair<int, int> E; const int num_nodes = 5; E edge_array[] = { E(0, 2), E(1, 3), E(1, 4), E(2, 1), E(2, 3), E(3, 4), E(4, 0), E(4, 1) }; int weights[] = { 1, 1, 2, 7, 3, 1, 1, 1 }; std::size_t num_edges = sizeof(edge_array) / sizeof(E); Graph g(edge_array, edge_array + num_edges, weights, num_nodes); property_map < Graph, edge_weight_t >::type weight = get(edge_weight, g); std::vector < Edge > spanning_tree; kruskal_minimum_spanning_tree(g, std::back_inserter(spanning_tree)); std::cout << "Print the edges in the MST:" << std::endl; for (std::vector < Edge >::iterator ei = spanning_tree.begin(); ei != spanning_tree.end(); ++ei) { std::cout << source(*ei, g) << " <--> " << target(*ei, g) << " with weight of " << weight[*ei] << std::endl; } return EXIT_SUCCESS; }

参考文献 http://www.boost.org/doc/libs/1_64_0/libs/graph/example/kruskal-example.cpp

沧海飞帆 认证博客专家 火星工程师 热爱多传感器融合slam、机器人、人工智能相关技术。立志于让机器人更智能,为人类移民火星做铺垫。让科技使生活更幸福,让科技改变世界。
转载请注明原文地址: https://www.6miu.com/read-17151.html

最新回复(0)