【问题标题】:Boost graphviz custom vertex labelsBoost graphviz 自定义顶点标签
【发布时间】:2011-12-24 06:47:34
【问题描述】:

目前我有一个项目的以下代码,它表示一些概率树,并为顶点和边类型使用自定义结构:

#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);

但这似乎不符合我的要求,因为它不输出顶点的名称。我应该在这里改变什么?

【问题讨论】:

    标签: c++ boost graphviz boost-graph


    【解决方案1】:

    看起来这只是因为我没有正确理解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);
    

    【讨论】:

      猜你喜欢
      • 2011-07-30
      • 2011-03-21
      • 1970-01-01
      • 2012-05-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-04
      • 1970-01-01
      • 2011-08-11
      相关资源
      最近更新 更多