Как предоставить свойство vertex_index для моего графа
Поскольку мой граф использует 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 ответ
Решение состоит в следующем:
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.