2011-11-08 59 views
3

目前我有一個代表某種概率的樹木和使用自定義結構的頂點和邊緣類型的項目下面的代碼:升壓的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但沒有標籤。我希望將頂點之間的連接標記爲在Edge結構中找到的概率以及在頂點結構中找到的關聯名稱標記的頂點。我在做這第一次嘗試使用此代碼:

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

但這似乎沒有做我想做的,因爲它不輸出頂點的名字。我應該在這裏改變什麼?

回答

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