]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/graph/example/clustering_coefficient.cpp
update source to Ceph Pacific 16.2.2
[ceph.git] / ceph / src / boost / libs / graph / example / clustering_coefficient.cpp
CommitLineData
7c673cae
FG
1// (C) Copyright Andrew Sutton 2007
2//
3// Use, modification and distribution are subject to the
4// Boost Software License, Version 1.0 (See accompanying file
5// LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
6
7c673cae
FG
7//[code_clustering_coefficient
8#include <iostream>
9#include <iomanip>
10
11#include <boost/graph/undirected_graph.hpp>
12#include <boost/graph/exterior_property.hpp>
13#include <boost/graph/clustering_coefficient.hpp>
14#include "helper.hpp"
15
16using namespace std;
17using namespace boost;
18
19// The Actor type stores the name of each vertex in the graph.
20struct Actor
21{
22 string name;
23};
24
25// Declare the graph type and its vertex and edge types.
f67539c2
TL
26typedef undirected_graph< Actor > Graph;
27typedef graph_traits< Graph >::vertex_descriptor Vertex;
28typedef graph_traits< Graph >::edge_descriptor Edge;
7c673cae
FG
29
30// The name map provides an abstract accessor for the names of
31// each vertex. This is used during graph creation.
f67539c2 32typedef property_map< Graph, string Actor::* >::type NameMap;
7c673cae
FG
33
34// The clustering property, container, and map define the containment
35// and abstract accessor for the clustering coefficients of vertices.
f67539c2 36typedef exterior_vertex_property< Graph, float > ClusteringProperty;
7c673cae
FG
37typedef ClusteringProperty::container_type ClusteringContainer;
38typedef ClusteringProperty::map_type ClusteringMap;
39
f67539c2 40int main(int argc, char* argv[])
7c673cae
FG
41{
42 // Create the graph and a name map that provides access to
43 // then actor names.
44 Graph g;
45 NameMap nm(get(&Actor::name, g));
46
47 // Read the graph from standard input.
48 read_graph(g, nm, cin);
49
50 // Compute the clustering coefficients of each vertex in the graph
51 // and the mean clustering coefficient which is returned from the
52 // computation.
53 ClusteringContainer coefs(num_vertices(g));
54 ClusteringMap cm(coefs, g);
55 float cc = all_clustering_coefficients(g, cm);
56
57 // Print the clustering coefficient of each vertex.
f67539c2
TL
58 graph_traits< Graph >::vertex_iterator i, end;
59 for (boost::tie(i, end) = vertices(g); i != end; ++i)
60 {
61 cout << setw(12) << setiosflags(ios::left) << g[*i].name << get(cm, *i)
62 << endl;
7c673cae
FG
63 }
64 cout << "mean clustering coefficient: " << cc << endl;
65
66 return 0;
67}
68//]