|
Boost : |
Subject: [boost] Problem with write_graphviz
From: Josep TORRAS FLAQUER (josep.torras-flaquer_at_[hidden])
Date: 2009-04-16 11:24:42
Hello,
I'm working with boost graph library. I'm creating a graph and i'd like
to write its description into a file or to display it on the screen.
The properties of Edges and Vertex are bundled, and i'm not able to
write them. I have read the doc once and again and i don't get to find a
solution. I have looked for examples but i haven't found anything
actually useful for me.
Could anyone please help me or propose a possible solution?
Here is my code:
#include <boost/graph/iteration_macros.hpp>
#include <string>
#include <boost/tuple/tuple.hpp>
#include <boost/graph/adjacency_list.hpp>
#include <boost/graph/visitors.hpp>
#include <boost/graph/breadth_first_search.hpp>
#include <map>
#include <boost/graph/adj_list_serialize.hpp>
#include <boost/archive/text_iarchive.hpp>
#include <boost/multi_array.hpp>
#include <cassert>
#include <boost/graph/graphviz.hpp>
//using namespace boost;
struct VertexProperties{
std::string gate_type;
int gate_level;
int gate_index;
int num_input;
float prob_err;
};
struct edge_properties {
std::string name;
};
typedef boost::adjacency_list<boost::vecS, boost::vecS,
boost::undirectedS, VertexProperties , edge_properties> Graph;
typedef boost::graph_traits<Graph>::vertex_descriptor Vertex;
typedef boost::graph_traits<Graph>::edge_descriptor Edge;
int main()
{
int i=0;
//const char* name = "123";
Graph g;
Vertex u1;
u1=add_vertex(g);
g[u1].gate_type = "Input";
g[u1].gate_level=1;
g[u1].gate_index=i;
g[u1].num_input=0;
g[u1].prob_err=0;
i++;
Vertex u2;
u2=add_vertex(g);
g[u2].gate_type = "Input";
g[u2].gate_level=1;
g[u2].gate_index=i;
g[u2].num_input=0;
g[u2].prob_err=0;
i++;
Vertex u3;
u3=add_vertex(g);
g[u3].gate_type = "Input";
g[u3].gate_level=1;
g[u3].gate_index=i;
g[u3].num_input=0;
g[u3].prob_err=0;
i++;
Vertex u4;
u4=add_vertex(g);
g[u4].gate_type = "XOR";
g[u4].gate_level=2;
g[u4].gate_index=i;
g[u4].num_input=0;
g[u4].prob_err=0.001;
i++;
Vertex u5;
u5=add_vertex(g);
g[u5].gate_type = "AND";
g[u5].gate_level=1;
g[u5].gate_index=i;
g[u5].num_input=0;
g[u5].prob_err=0.001;
i++;
Vertex u6;
u6=add_vertex(g);
g[u6].gate_type = "XOR";
g[u6].gate_level=1;
g[u6].gate_index=i;
g[u6].num_input=0;
g[u6].prob_err=0.001;
i++;
Vertex u7;
u7=add_vertex(g);
g[u7].gate_type = "AND";
g[u7].gate_level=1;
g[u7].gate_index=i;
g[u7].num_input=0;
g[u7].prob_err=0.001;
i++;
Vertex u8;
u8=add_vertex(g);
g[u8].gate_type = "OR";
g[u8].gate_level=1;
g[u8].gate_index=i;
g[u8].num_input=0;
g[u8].prob_err=0.001;
i++;
Edge e1;
e1=(add_edge(u1,u4,g)).first;
Edge e2;
e2=(add_edge(u1,u5,g)).first;
Edge e3;
e3=(add_edge(u2,u4,g)).first;
Edge e4;
e4=(add_edge(u2,u5,g)).first;
Edge e5;
e5=(add_edge(u3,u6,g)).first;
Edge e6;
e6=(add_edge(u3,u7,g)).first;
Edge e7;
e7=(add_edge(u4,u6,g)).first;
Edge e8;
e8=(add_edge(u4,u7,g)).first;
Edge e9;
e9=(add_edge(u5,u8,g)).first;
Edge e10;
e10=(add_edge(u7,u8,g)).first;
const char* name[] = { "Input 1", "Input 2", "Input
3","XOR","AND","XOR","AND","OR"};
int index[] =
{g[u1].gate_index,g[u2].gate_index,g[u3].gate_index,g[u4].gate_index,g[u5].gate_index,g[u6].gate_index,g[u7].gate_index,g[u8].gate_index};
write_graphviz(std::cout, g, boost::make_label_writer(name));
}
I am able to write a label, but i can't write all the properties, and
that's what i want.
Thank you.
Josep
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk