1. 程式人生 > >13.boost最小生成樹 kruskal_min_spainning_tree

13.boost最小生成樹 kruskal_min_spainning_tree

cin imu des out HP 權重 space 點名 bsp

 1 #include <iostream>
 2 #include <boost/config.hpp>
 3 //圖(矩陣實現)
 4 #include <boost/graph/adjacency_matrix.hpp>
 5 #include <boost\graph\graph_utility.hpp>
 6 #include <boost/graph/graph_traits.hpp>
 7 //圖(鏈表實現)
 8 #include <boost/graph/adjacency_list.hpp>
 9 //求最小生成樹
10 #include <boost/graph/kruskal_min_spanning_tree.hpp>
11
using namespace std; 12 using namespace boost; 13 14 //頂點名稱 15 enum { A, B, C, D, E, F }; 16 //頂點個數 17 #define N 6 18 const char *name = "ABCDEF"; 19 20 //無向圖 21 void main() 22 { 23 //圖,每個結點是vec來實現,無向圖,有邊長與權重的屬性 24 adjacency_list<vecS, vecS, undirectedS, no_property, property<edge_weight_t, int
>> myg; 25 add_edge(A, B,13, myg); 26 add_edge(B, C,23 ,myg); 27 add_edge(A, C,1, myg); 28 add_edge(A, D,11, myg); 29 add_edge(C, D,10, myg); 30 add_edge(B, D,11, myg); 31 32 //鏈表 33 typedef adjacency_list<vecS, vecS, undirectedS, property<edge_weight_t, int>> mygraph;
34 //創建邊的鏈表 35 list<mygraph::edge_descriptor> mylist; 36 //生成的結果尾插到mylist 37 kruskal_minimum_spanning_tree(myg, back_inserter(mylist)); 38 39 //創建邊與權重的映射(weight是函數指針) 40 auto weight= get(edge_weight,myg); 41 //property_map<mygraph, edge_weight_t>::type weight = get(edge_weight, myg); 42 43 for (auto ib = mylist.begin(); ib != mylist.end(); ib++) 44 { 45 //輸出邊 46 //cout << *ib << endl; 47 cout << source(*ib, myg) << "->" << target(*ib, myg) << "權重" << weight(*ib) << endl; 48 } 49 cin.get(); 50 }

13.boost最小生成樹 kruskal_min_spainning_tree