Boost logo

Boost Users :

Subject: [Boost-users] Some help for betweenness centrality for undirected weighted graph
From: Xinran Wang (xwan454_at_[hidden])
Date: 2016-01-24 20:06:05


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 <boost/graph/betweenness_centrality.hpp>
#include <boost/graph/adjacency_list.hpp>
#include <boost/graph/graphviz.hpp>

typedef boost::property<boost::edge_weight_t, float> 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<int, int> Edge;
typedef std::map<Edge, int> 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);

}



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