|
Boost Users : |
Subject: [Boost-users] (no subject)
From: Gabriel Marchand (gabriel.marchand_at_[hidden])
Date: 2011-04-06 06:55:52
Hi, I am new to boost and I face the same problem mentioned here with
"connected_components()" using a mutable graph (hence using a list for the
vertex container). I try the detailed solution of Aaron Windsor in the previous
post but I still get some errors at compilation. Here is my little code:
#include <boost/graph/adjacency_list.hpp>
#include <boost/graph/connected_components.hpp>
using namespace std;
using namespace boost;
Box& b = conf.GetBox();
if (!ai) {
ai = new AtomList();
*ai = conf.GetAtoms().AtomSelector(selecti, b);
}
typedef boost::adjacency_list<
listS,
listS,
undirectedS,
property<vertex_index_t, size_t>,
no_property>
> graph_t;
graph_t g(ai->size());
property_map<graph_t, vertex_index_t>::type index = get(vertex_index, g);
graph_traits<graph_t>::vertex_iterator vi, vi_end;
graph_traits<graph_t>::vertices_size_type cnt = 0;
for(tie(vi,vi_end) = vertices(g); vi != vi_end; ++vi)
put(index, *vi, cnt++);
for (unsigned int i = 0; i < ai->size(); ++i) {
Cartesian& crdi = ai->GetElement(i)->pos;
for (unsigned int j = i + 1; j < ai->size(); ++j) {
Cartesian& crdj = ai->GetElement(j)->pos;
double r = conf.GetBox().CartesianDistance(crdi, crdj);
if (r < rcut) {
add_edge(vertex(i,g), vertex(j,g), g); // Add edge to Map if
distance criteria is satisfied
}
}
}
vector<int> component(num_vertices(g));
int num_clusters = connected_components(g, &component[0],
vertex_index_map(index));
The compilation is successfull until I add the last line:
int num_clusters = connected_components(g, &component[0],
vertex_index_map(index));
Hope somebody can give a hint
gabriel
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net