Boost Graph Library C ++ / Степенное право

0

У меня есть вектор вершины с координатами id, x & y, я хочу сгенерировать граф степенного закона для моих вершин. Граф библиотеки Boost предоставляет power lawpiterator(), но как я могу сгенерировать это с моими вершинами. любой может помочь?

Теги:
boost
boost-graph
power-law

1 ответ

3

В документации Boost указано, что это генераторы.

"Этот шаблон класса реализует генератор для графиков без масштаба, используя алгоритм" Закон законности (PLOD) "(http://www.boost.org/doc/libs/1_55_0/libs/graph/doc/plod_generator.html)

Это немного запутанно, что он говорит итератор.

Вместо этого я создавал бы вектор структур с вашими данными, а затем генерировал граф степенного закона с тем же числом узлов.

Модифицировано из дополнительной документации:

#include <boost/graph/adjacency_list.hpp>
#include <boost/graph/plod_generator.hpp>
#include <boost/random/linear_congruential.hpp>

struct VertData{
  size_t id;
  size_t x;
  size_t y;
};

typedef boost::adjacency_list<> Graph;
typedef boost::plod_iterator<boost::minstd_rand, Graph> SFGen;

int main()
{

  vector<VertData> vertData;
  //... Initialize with data ...


  boost::minstd_rand gen;
  // Create graph with 100 nodes 
  Graph g(SFGen(gen, 100, 2.5, 1000), SFGen(), 100);


  typedef property_map<Graph, vertex_index_t >::type VertexIndexMap;
  VertexIndexMap iMap = get(vertex_index,g);
  // ... get some vertex v
  size_t vertexIndex = iMap[v];
  //...
  vertexData.at(vertexIndex).x = 4;//or what ever



  return 0;
}

Здесь будет установлен масштабный граф с 100 узлами с степенной степенью степени 2,5.

Затем, когда вы хотите получить доступ к данным узла, просто получите доступ к его индексу и просмотрите свой вектор структуры. Вы можете получить индекс следующим образом:

typedef property_map<Graph, vertex_index_t >::type VertexIndexMap;
VertexIndexMap iMap = get(vertex_index,g);
size_t vertexIndex = iMap[v];
...
vertexData.at(vertexIndex).x = 4;//or what ever

Это может быть не самым лучшим способом, но это позволило мне выполнить мою работу.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню