【发布时间】:2014-08-06 05:10:53
【问题描述】:
我试图让 BGL 输出一个只有边缘的文件,因为我正在做一个最大连接组件并且我不想擦除顶点但如果没有边缘我也不想绘制它们.
我现在的点文件是:
graph G {
0;
1;
2;
3;
4;
5;
6;
7;
8;
9;
10;
11;
12;
0--1 [label="-3"];
0--5 [label="-2"];
2--3 [label="-8"];
3--8 [label="-4"];
4--5 [label="-1"];
4--6 [label="-6"];
4--7 [label="-5"];
4--8 [label="-10"];
8--9 [label="-9"];
}
我通过运行打印它
boost::write_graphviz(myfile, G, boost::default_writer(), make_edge_writer(w_map));
make_edge_writer(w_map) 确保我打印出重量(忽略负号,我实际上是在做一个最大生成树,但我的玩具示例有正边)。
现在,graphviz 在我的正确图形中绘制了 9 个顶点,以及单独的顶点 {10、11、12)。如果我手动将我的点文件编辑为:
graph G {
0--1 [label="-3"];
0--5 [label="-2"];
2--3 [label="-8"];
3--8 [label="-4"];
4--5 [label="-1"];
4--6 [label="-6"];
4--7 [label="-5"];
4--8 [label="-10"];
8--9 [label="-9"];
}
然后运行graphviz,我得到相同的图减去多余的顶点!这基本上意味着graphviz不需要事先知道顶点,对吧?
那么,有谁知道我怎样才能让write_graphviz 事先不写顶点索引?我不想删除这些顶点,因为在实际示例中,多余的顶点可能在图中,然后我的顶点编号与我的输入不对应..
另外,这真的没什么大不了的,但它一直困扰着我,我想知道是否有人知道该怎么做。我尝试从 boost::default_writer() 更改为我自己的代码(没有做任何事情),但似乎没有任何区别。
【问题讨论】: