Boost logo

Boost Users :

From: Rui Carvalho (rui.carvalho_at_[hidden])
Date: 2005-08-31 11:05:51


Hi,

I'm trying to write code to compute Brandes' Betweenness Centrality for a
very simple graph: a star. I'm doing this, as I haven't been able to find
simple examples in the documentation [hint :)] for vecS,vecS graphs and
still haven't grasped how edge property maps work.

I've got it running if all I want is to compute vertex BC (see below, also
attached), but can't get it to compute both vertex and edge BC. I'd
appreciate any suggestions -perhaps my example (or something similar) could
be corrected and included in the BGL?

Thanks,
Rui

#include <iostream> // for std::dataout
#include <utility> // for std::pair

#include <boost/utility.hpp> // for boost::tie
#include <boost/graph/graph_traits.hpp> // for boost::graph_traits
#include <boost/graph/graph_utility.hpp>
#include <boost/graph/betweenness_centrality.hpp>//for
boost::brandes_betweenness_centrality

#include <boost/graph/adjacency_list.hpp>

using namespace boost;
using namespace std;

typedef adjacency_list < vecS, //Store out-edges
vecS,
//Store vertex set
undirectedS, //the graph
is undirected
property<edge_index_t, int> >
Graph;

typedef graph_traits<Graph>::vertex_descriptor Vertex;
typedef graph_traits<Graph>::vertex_iterator Vertex_Iter;

typedef graph_traits<Graph>::edge_descriptor Edge;
typedef graph_traits<Graph>::edge_iterator Edge_Iter;

typedef property_map<Graph, vertex_name_t>::type Name_Map_t;
typedef property_map<Graph, edge_index_t>::type Edge_Map_t;

int main(int,char*[])
{
        int n_vrtx = 5;

        //Builds graph with vertices, but no edges
        Graph g_star(n_vrtx);

        //Add edges. Graph g_star is a star
        add_edge(vertex(0, g_star), vertex(4, g_star), g_star);
        add_edge(vertex(1, g_star), vertex(4, g_star), g_star);
        add_edge(vertex(2, g_star), vertex(4, g_star), g_star);
        add_edge(vertex(3, g_star), vertex(4, g_star), g_star);

        Vertex_Iter vertex_iterator_begin, vertex_iterator_end;

        std::vector<double> centrality(n_vrtx);
        
        brandes_betweenness_centrality(g_star,
centrality_map(make_iterator_property_map(centrality.begin(),
get(vertex_index, g_star),double())).vertex_index_map(get(vertex_index,
g_star)));

        for ( tie(vertex_iterator_begin, vertex_iterator_end) =
vertices(g_star); vertex_iterator_begin !=
vertex_iterator_end; ++vertex_iterator_begin)
        {
                cout << "Vertex: " << *vertex_iterator_begin <<"\tBC: "<<
centrality[*vertex_iterator_begin] << endl;

        }
}




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