gursoy_atun_layout_test.cpp

来自「Boost provides free peer-reviewed portab」· C++ 代码 · 共 139 行

CPP
139
字号
// Copyright 2004 The Trustees of Indiana University.// Use, modification and distribution is subject to the Boost Software// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at// http://www.boost.org/LICENSE_1_0.txt)//  Authors: Jeremiah Willcock//           Douglas Gregor//           Andrew Lumsdaine#include <boost/graph/gursoy_atun_layout.hpp>#include "boost/graph/adjacency_list.hpp"#include "boost/graph/random.hpp"#include "boost/graph/graphviz.hpp"#include "boost/random/mersenne_twister.hpp"#include "boost/random/linear_congruential.hpp"#include "boost/random/uniform_01.hpp"#include <iostream>#include <fstream>#include <sstream>#if 0#include <boost/graph/plod_generator.hpp>#include <boost/graph/small_world_generator.hpp>#endifusing namespace boost;template <class Property, class Vertex>struct position_writer {  const Property& property;  position_writer(const Property& property): property(property) {}  void operator()(std::ostream& os, const Vertex& v) const {    os << "[pos=\"" << int(property[v][0]) << "," << int(property[v][1]) << "\"]";  }};struct graph_writer {  void operator()(std::ostream& os) const {    os << "node [shape=point, width=\".01\", height=\".01\", fixedsize=\"true\"]"       << std::endl;  }};int main(int, char*[]) {  // Generate a graph structured like a grid, cylinder, or torus; lay it out in  // a square grid; and output it in dot format  typedef boost::adjacency_list<boost::vecS, boost::vecS, boost::undirectedS,                                boost::no_property,                                 boost::property<boost::edge_weight_t, double>                                > graph_type;  typedef boost::graph_traits<graph_type>::vertex_descriptor vertex_descriptor;  // boost::mt19937 rng;  // boost::generate_random_graph(graph, 100, 600, rng, false, false);#if 1  graph_type graph;  // Make grid, like Gursoy and Atun used  std::map<int, std::map<int, vertex_descriptor> > verts;  const int grid_size = 30;  boost::minstd_rand edge_weight_gen;  boost::uniform_01<boost::minstd_rand> random_edge_weight(edge_weight_gen);  for (int i = 0; i < grid_size; ++i)    for (int j = 0; j < grid_size; ++j)      verts[i][j] = add_vertex(graph);  for (int i = 0; i < grid_size; ++i) {    for (int j = 0; j < grid_size; ++j) {      if (i != 0)        add_edge(verts[i][j], verts[i-1][j], random_edge_weight(), graph);      if (j != 0)        add_edge(verts[i][j], verts[i][j-1], random_edge_weight(), graph);#if 0      // Uncomment parts of this to get a cylinder or torus      if (i == 0)        add_edge(verts[0][j], verts[grid_size-1][j], random_edge_weight(),                  graph);      if (j == 0)        add_edge(verts[i][0], verts[i][grid_size-1], random_edge_weight(),                  graph);#endif    }  }#else  using namespace boost;#if 0  int n = 10000;  double alpha = 0.4;  double beta = 50;  minstd_rand gen;  graph_type graph(plod_iterator<minstd_rand, graph_type>(gen, n, alpha, beta),                   plod_iterator<minstd_rand, graph_type>(),                   n);#else   int n = 100000;  int k = 6;  double p = 0.001;  minstd_rand gen;  graph_type graph(small_world_iterator<minstd_rand>(gen, n, k, p),                   small_world_iterator<minstd_rand>(n, k),                   n);#endif#endif  // boost::read_graphviz(stdin, graph);  typedef boost::property_map<graph_type, boost::vertex_index_t>::type     VertexIndexMap;  VertexIndexMap vertex_index = get(boost::vertex_index_t(), graph);  typedef boost::heart_topology<> topology;  topology space;  typedef topology::point_type point;  std::vector<point> position_vector(num_vertices(graph));  typedef boost::iterator_property_map<std::vector<point>::iterator,                                       VertexIndexMap, point, point&> Position;  Position position(position_vector.begin(), vertex_index);  boost::gursoy_atun_layout(graph, space, position);  std::cerr << "--------Unweighted layout--------\n";  boost::write_graphviz(std::cout, graph,                         position_writer<Position, vertex_descriptor>(position),                        boost::default_writer(),                        graph_writer());  boost::gursoy_atun_layout(graph, space, position,                            weight_map(get(boost::edge_weight, graph)));  std::cerr << "--------Weighted layout--------\n";  boost::write_graphviz(std::cout, graph,                         position_writer<Position, vertex_descriptor>(position),                        boost::default_writer(),                        graph_writer());  return 0;}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?