как предоставить свойство vertex_index для моего графика - PullRequest
6 голосов
/ 29 октября 2011

Поскольку мой граф использует setS для вершины, я должен либо предоставить карту свойств vertex_index для своего графа, либо дать явный аргумент vertex_id для write_graphviz, чтобы иметь возможность использовать write_graphviz. My graph is defined as: typedef adjacency_list<setS, setS, undirectedS, NodeData, EdgeData> Graph; Где NodeData и EdgeData являются структурами. Можете ли вы дать мне очень простой пример того, как предоставить карту свойств vertex_index для моего графа? или как дать явный аргумент vertex_id для write_graphviz?

Спасибо

1 Ответ

11 голосов
/ 19 декабря 2011

Решение заключается в следующем: 1) Скажем, дескриптор вершины определен как typedef Graph::vertex_descriptor NodeID;, тогда вам нужно определить ассоциативную карту свойств следующим образом:

typedef map<NodeID, size_t> IndexMap;
IndexMap mapIndex;
associative_property_map<IndexMap> propmapIndex(mapIndex);

2) В коде индексировать все вершины следующим образом:

int i=0;
BGL_FORALL_VERTICES(v, g, Graph)
{
   put(propmapIndex, v, i++);
}

3) Теперь вы можете использовать graphvize для дроу / визуализации вашего графика следующим образом:

ofstream myfile;
myfile.open ("example.txt");
write_graphviz(myfile, g, default_writer(), default_writer(), default_writer(), propmapIndex);
myfile.close();

График будет описан в example.txt, вы можете визуализировать его с помощью graphviz.

...