Hi everyone, this is from Jason. I am a new user of Boost library.
Nowadays, I am doing a research about betweenness centrality measure. I am
very confused about how to use boost to calculate the betweenness
centrality. I need to calculate the centrality score based on a undirected
and weighted graph. The following code is what I tried to do. But this
block of code can only be used for calculated for unweighted graph. Could
anyone here can offer me examples? Thanks for any reply.
#include
#include
#include
typedef boost::property EdgeWeightProperty;
typedef boost::adjacency_list < boost::listS, boost::vecS,
boost::undirectedS,
boost::no_property, EdgeWeightProperty > Graph;
typedef boost::graph_traits < Graph >::vertex_descriptor vertex_descriptor;
typedef boost::graph_traits < Graph >::edge_descriptor edge_descriptor;
typedef std::pair Edge;
typedef std::map StdEdgeIndexMap;
void betweennessCentrality()
{
Graph g;
Graph::vertex_descriptor a1 = boost::add_vertex(g);
Graph::vertex_descriptor a2 = boost::add_vertex(g);
Graph::vertex_descriptor a3 = boost::add_vertex(g);
Graph::vertex_descriptor a4 = boost::add_vertex(g);
Graph::vertex_descriptor a5 = boost::add_vertex(g);
Graph::vertex_descriptor a6 = boost::add_vertex(g);
Graph::vertex_descriptor a7 = boost::add_vertex(g);
EdgeWeightProperty weight0 = 1;
boost::add_edge(a1, a2, weight0, g);
EdgeWeightProperty weight1 = 1;
boost::add_edge(a1, a3, weight1, g);
EdgeWeightProperty weight2 = 1;
boost::add_edge(a2, a3, weight2, g);
EdgeWeightProperty weight3 = 1;
boost::add_edge(a3, a4, weight3, g);
EdgeWeightProperty weight4 = 1;
boost::add_edge(a4, a5, weight4, g);
EdgeWeightProperty weight5 = 1;
boost::add_edge(a5, a6, weight5, g);
EdgeWeightProperty weight6 = 1;
boost::add_edge(a5, a7, weight6, g);
EdgeWeightProperty weight7 = 1;
boost::add_edge(a6, a7, weight7, g);
typedef boost::property_map< Graph, boost::vertex_index_t>::type
VertexIndexMap;
VertexIndexMap v_index = get(boost::vertex_index, g);
std::vector< double > v_centrality_vec(boost::num_vertices(g), 0.0);
boost::iterator_property_map< std::vector< double >::iterator,
VertexIndexMap >
v_centrality_map(v_centrality_vec.begin(), v_index);
brandes_betweenness_centrality( g, v_centrality_map);
}