对于我的C++程序,我需要使用Boost Graph读取DOT文件,并稍后输出另一个DOT文件。不过,我在读入阶段遇到了一个奇怪的错误,这真的搞砸了我的程序。奇数错误导入DOT文件
我的读入的代码(图形类型是双向升压曲线图的一个typedef)
void readGraph(Graph& graph, string filename) {
boost::dynamic_properties dp(boost::ignore_other_properties);
ifstream fin(filename.c_str());
boost::read_graphviz(fin, graph, dp);
}
好了,所以问题是,在.DOT文件中的节点都在在读错误的订单!我用一个简单的例子.DOT文件试过:
digraph G {
0; 1; 2; 3; 4; 5; 6; 7; 8; 9; 10;
0->1; 1->0;
1->2; 2->1;
2->3; 3->2;
3->4; 4->3;
4->5; 5->4;
5->6; 6->5;
6->7; 7->6;
7->8; 8->7;
8->9; 9->8;
9->10; 10->9;
}
这是从节点0到节点10的双向链然而,如果我读取使用升压图形,并将其输出该文件没有立即改变,变得:
digraph G {
0;
1;
2;
3;
4;
5;
6;
7;
8;
9;
10;
0->1 ;
1->3 ;
3->4 ;
4->5 ;
5->6 ;
6->7 ;
7->8 ;
8->9 ;
9->10 ;
10->2 ;
1->0 ;
3->1 ;
4->3 ;
5->4 ;
6->5 ;
7->6 ;
8->7 ;
9->8 ;
10->9 ;
2->10 ;
}
请注意,节点2现在无法解释地连接到节点10,并且在链的末端。我已经完成了没有什么在读取和输出图之间。
注:
当我尝试这种更复杂的.DOT文件,图的拓扑结构是一样的,它只是节点已经被交换一些奇怪的原因。
我知道这是一个读,而不是写错误,因为当我在程序期间输出顶点和边时,它们已经搞砸了。
任何人都可以帮助我理解和解决这个问题吗?谢谢。
请稍候带自受理这里。我会在稍后时间找到完整的问题。我可能会发现潜在的问题。同时,你可以[搜索我现有的答案](http://stackoverflow.com/search?tab=relevance&q=user%3a85371%20read_graphviz)万一你发现你在做什么不同的事情 – sehe
有没有什么可怕的事情发生毕竟(“虚假的”连接(_node 2现在无法解释地连接到节点10_)在我的答案 – sehe
+ 1-ed中解释,因为我看到你几乎拥有了所有的组件,我只是不同意“这真的很愚蠢,不直观“ - 在阅读的时候,解析器无法知道节点id的类型顺便说一下,如果你有能力改变节点id的格式(例如'02'和'03'),那么就有另一种选择:https://vimeo.com/channels/761265 – sehe