| Graphs: | undirected |
|---|---|
| Properties: | distance, weight, color, vertex id |
| Complexity: | O(E log V) |
(1)
template <class VertexListGraph, class Vertex>
void prim_minimum_spanning_tree(VertexListGraph& G, Vertex s);
(2)
template <class VertexListGraph, class Vertex, class Distance>
void prim_minimum_spanning_tree(VertexListGraph& G, Vertex s, Distance d);
(3)
template <class VertexListGraph, class Vertex,
class Distance, class Visitor>
void prim_minimum_spanning_tree(VertexListGraph& G, Vertex s,
Distance d, Visitor visit);
(4)
template <class VertexListGraph, class Vertex, class Visitor,
class Distance, class Weight, class Color, class ID>
void prim_minimum_spanning_tree(VertexListGraph& G, Vertex s,
Distance d, Weight w, Color c, ID id,
Visitor visit);
This is Prim's algorithm [25,8,27,15] for solving the minimum spanning tree problem for an undirected graph with weighted edges. See Section Minimum Spanning Tree Algorithms for a definition of the minimum spanning tree problem. The implementation is simply a call to uniform_cost_search() with the appropriate choice of comparison and combine functors.
boost/graph/prim_minimum_spanning_tree.hpp
The time complexity is O(E log V).
The source code for this example is in examples/prim.cpp.
typedef adjacency_list < vecS, vecS, undirectedS,
distance_property<>, weight_property<int> > Graph;
typedef std::pair<int,int> E;
const int num_nodes = 5;
E edges[] = { E(0,2),
E(1,1), E(1,3), E(1,4),
E(2,1), E(2,3),
E(3,4),
E(4,0) };
int weights[] = { 1, 2, 1, 2, 7, 3, 1, 1};
Graph G(num_nodes, edges, edges + sizeof(edges)/sizeof(E), weights);
std::vector<Graph::vertex_descriptor> p(num_vertices(G));
prim_minimum_spanning_tree(G, *(vertices(G).first),
visit_predecessor_ptr(p.begin()));
for ( std::vector<Graph::vertex_descriptor>::iterator i = p.begin();
i != p.end(); ++i)
if (*i != Graph::vertex_descriptor() )
cout << "parent[" << i - p.begin()
<< "] = " << id_property_map()[*i] << endl;
else
cout << "parent[" << i - p.begin() << "] = no parent" << endl;
The output is:
parent[0] = 0 parent[1] = 3 parent[2] = 0 parent[3] = 4 parent[4] = 0
| Copyright © 2000 | Jeremy Siek, Univ.of Notre Dame (jsiek@lsc.nd.edu) |