對於我的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