目前,我有一个代表一些概率树的项目的代码,并为顶点和边缘类型使用自定义结构:
#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但没有标签的简单视觉表示一些简单的树。我希望顶点之间的连接用Edge结构中找到的概率标记,顶点用Vertex结构中找到的关联名称标记。我第一次尝试这样做是为了使用这段代码:
std::ofstream outf("test.dot");
boost::dynamic_properties dp;
dp.property("name", get(&Vertex::name, test));
dp.property("node_id", get(boost::vertex_index, test));
write_graphviz_dp(outf, test, dp);
但这似乎没有做我想要的,因为它不输出顶点的名称。我应该在这里改变什么?
答案 0 :(得分:2)
看起来这只是因为我没有正确理解graphviz。以下代码按预期工作:
std::ofstream outf("test.dot");
boost::dynamic_properties dp;
dp.property("label", boost::get(&Vertex::name, test));
dp.property("node_id", boost::get(boost::vertex_index, test));
dp.property("label", boost::get(&Edge::probability, test));
write_graphviz_dp(outf, test, dp);