Hello again,

I'm still not convinced boost is interpreting these file correctly.  I understand and agree that node id's are strings.  I do not understand why you think these graph files are a special case.

Answer me the following.  Why is that when I process the following using the dot binary that i get back a picture with the correct interpretation, but when I read the same file using the boost library its interpretation is skewed?

strict graph  {
    0 -- 3;
    0 -- 4;
    1 -- 3;
    1 -- 4;
    2 -- 3;
    2 -- 4;
    3 -- 4;
}

On 9/19/07, Ronald Garcia < garcia@cs.indiana.edu> wrote:
Hi Brian,
On Sep 19, 2007, at 10:41 AM, Brian Stadler wrote:


Code for writing is very simple.  I dont use this code unless I am doing testing.

ofstream fo(filename.c_str());
write_graphviz(fo, [graph here]);
fo.close();



The function you speak of is listed on http://boost.org/libs/graph/doc/write-graphviz.html.  It is included with 1.33.1.


Based on my reading of the write_graphviz docs, it seems that the function that I suggested will get you the results that you want.   Also, I should mention that you don't need to keep the dynamic_properties object around to get the vertex names.  They are also available directly from the internal vertex_name property map of your graph.  You could use one of the versions of write_graphviz that takes a VertexID argument instead.

To be honest, I wish read_graphviz() did not require a dynamic properties object.  If one wants to read a very simple dot file without any extra stuff then they basically have to create a fake dp object just to do this.

Bear in mind that the graphs you are parsing with read_graphviz are a special case:   The names of the vertices happen to be integral numbers.  In general, graphviz graphs can have almost arbitrary string identifiers as node id's.  Even though node id's do not have to be in quotes, they're still just character strings as far as the DOT language is concerned.  I think that in the most common-cases:
1) the names of graph nodes are arbitrary strings (not integers)
2) the consumer of the DOT-specified graph cares about those names

The dynamic_properties object at the least guarantees that you can associate the names of the vertices with the vertices that are created in your graph object.   The problem that you have been having that you originally reported is that you were indeed losing the node name information (the string representations of integers) when you were writing out your graphs using write_graphviz.  That information is preserved in the vertex_name property map that you passed along to dynamic_properties, and also in the dynamic_properties



Quick note,  I changed the dot files I was reading in from the original post to the following, which is the way the boost library outputs them.

graph G {
"0";
"1";
"2";
"0" -- "1";
"0" -- "2";
"1" -- "2";
}

Vertices are quoted but boost is able to handle it correctly.

This is actually a good demonstration of how graphviz node id's are really strings, not numbers.  The version of the graph output by write_graphviz may be textually different (because of the addition of quotation marks), but as far as any DOT tool is concerned, it's the same graph.

HTH,
ron




_______________________________________________
Boost-users mailing list
Boost-users@lists.boost.org
http://lists.boost.org/mailman/listinfo.cgi/boost-users