#c #boost #graphviz #boost-graph
#c #улучшите #graphviz #увеличьте-график
Вопрос:
В настоящее время у меня есть следующий код для проекта, который представляет некоторые деревья вероятностей и использует пользовательские структуры для типов вершин и ребер:
#include <boost/graph/adjacency_list.hpp>
#include <boost/graph/graphviz.hpp>
struct Vertex{
std::string name;
size_t times_visited;
float value;
bool terminal_node;
bool root_node;
};
struct Edge{
float probability;
};
//Some typedefs for simplicity
typedef boost::adjacency_list<boost::listS, boost::vecS, boost::directedS, Vertex, Edge> directed_graph_t;
typedef boost::graph_traits<directed_graph_t>::vertex_descriptor vertex_t;
typedef boost::graph_traits<directed_graph_t>::edge_descriptor edge_t;
В настоящее время у меня есть простое визуальное представление некоторых простых деревьев с использованием boost graphviz, но без меток. Я хотел бы, чтобы связи между вершинами были помечены вероятностью, найденной в структуре ребер, и вершинами, помеченными ассоциированным именем, найденным в структуре вершин. Моей первой попыткой сделать это было использовать этот код:
std::ofstream outf("test.dot");
boost::dynamic_properties dp;
dp.property("name", get(amp;Vertex::name, test));
dp.property("node_id", get(boost::vertex_index, test));
write_graphviz_dp(outf, test, dp);
Но, похоже, это не делает того, что я хочу, поскольку не выводит имя вершины. Что я должен здесь изменить?
Ответ №1:
Похоже, это было просто потому, что я не понимал graphviz должным образом. Следующий код работал так, как ожидалось:
std::ofstream outf("test.dot");
boost::dynamic_properties dp;
dp.property("label", boost::get(amp;Vertex::name, test));
dp.property("node_id", boost::get(boost::vertex_index, test));
dp.property("label", boost::get(amp;Edge::probability, test));
write_graphviz_dp(outf, test, dp);