| // (C) Copyright Andrew Sutton 2007 |
| // |
| // Use, modification and distribution are subject to the |
| // Boost Software License, Version 1.0 (See accompanying file |
| // LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) |
| |
| //[influence_prestige_example |
| #include <iostream> |
| #include <iomanip> |
| |
| #include <boost/graph/directed_graph.hpp> |
| #include <boost/graph/exterior_property.hpp> |
| #include <boost/graph/degree_centrality.hpp> |
| |
| #include "helper.hpp" |
| |
| using namespace std; |
| using namespace boost; |
| |
| // The Actor type stores the name of each vertex in the graph. |
| struct Actor |
| { |
| string name; |
| }; |
| |
| // Declare the graph type and its vertex and edge types. |
| typedef directed_graph<Actor> Graph; |
| typedef graph_traits<Graph>::vertex_descriptor Vertex; |
| typedef graph_traits<Graph>::edge_descriptor Edge; |
| |
| // The name map provides an abstract accessor for the names of |
| // each vertex. This is used during graph creation. |
| typedef property_map<Graph, string Actor::*>::type NameMap; |
| |
| // Declare a container type for influence and prestige (both |
| // of which are degree centralities) and its corresponding |
| // property map. |
| typedef exterior_vertex_property<Graph, unsigned> CentralityProperty; |
| typedef CentralityProperty::container_type CentralityContainer; |
| typedef CentralityProperty::map_type CentralityMap; |
| |
| int |
| main(int argc, char *argv[]) |
| { |
| // Create the graph and a property map that provides |
| // access to the actor names. |
| Graph g; |
| NameMap nm(get(&Actor::name, g)); |
| |
| // Read the graph from standard input. |
| read_graph(g, nm, cin); |
| |
| // Compute the influence for the graph. |
| CentralityContainer influence(num_vertices(g)); |
| CentralityMap im(influence, g); |
| all_influence_values(g, im); |
| |
| // Compute the influence for the graph. |
| CentralityContainer prestige(num_vertices(g)); |
| CentralityMap pm(prestige, g); |
| all_prestige_values(g, pm); |
| |
| // Print the degree centrality of each vertex |
| graph_traits<Graph>::vertex_iterator i, end; |
| for(tie(i, end) = vertices(g); i != end; ++i) { |
| Vertex v = *i; |
| cout << setiosflags(ios::left) << setw(12) |
| << g[v].name << "\t" |
| << im[v] << "\t" |
| << pm[v] << endl; |
| } |
| |
| return 0; |
| } |
| //] |