2013-12-17 53 views
1

這是我在Stackoverflow上的第一篇文章。因此,如果我違反任何發佈規則,請不要對我造成嚴重傷害。boost圖庫:合併無向圖

我正在與BGL戰鬥。對於我大學的一個項目,我需要一些圖表相關的東西。因此,我需要的一個重要功能是合併兩個無向圖。

我已經搜索了相關的問題,並發現這些主題:

Merging graphs using boost graph

copy a graph (adjacency_list) to another one

第一個不爲我工作,因爲我總是得到一個「超出範圍」 copy_graph函數內的錯誤。我敢肯定,我的這個代碼並不是我的嘗試將它應用到我的程序中的問題。

第二個合併兩個圖(與頂點有關),但新圖的邊緣信息不正確。

此代碼顯示我如何定義我的圖形。這是一個無向圖的頂點屬性(無邊緣屬性):

struct m_vertex_properties { 
Element* element; 
Strip* strip; 
}; 

typedef adjacency_list<vecS, vecS, undirectedS, m_vertex_properties,no_property> MyGraph; 
typedef MyGraph::vertex_descriptor NodeID; 

基於第二連桿我張貼我用下面的函數上:

*static*/ void Fracture::merging(MyGraph & g1, NodeID v_in_g1, MyGraph & g2, NodeID u_in_g2) {  // EDGES ARE NOT CREATED CORRECTLY!!! 

typedef map<NodeID, size_t> IndexMap; 
IndexMap mapIndex; 
associative_property_map<IndexMap> propmapIndex(mapIndex); 

int i=0; 
BGL_FORALL_VERTICES(v, g2, MyGraph) 
{ 
    put(propmapIndex, v, i++); 
} 

copy_graph(g2, g1, vertex_index_map(propmapIndex)); //means g1 += g2 
} 

正如我所提到:將所得的圖形(G1)包含所有頂點(在我的測試場景2 + 3中),但由於某些原因,只有3個邊。

我希望對於比我更先進的人來說,錯誤很容易找到。老實說,我甚至都不明白這個功能的所有功能。感謝你們!

+2

A [SSCCE](http://meta.stackexchange.com/questions/22754/sscce-how-to-provide-examples-for-programming-questions)可能會有幫助。 –

回答

-1

如果頂點從g2複製到g1中,聽起來很奇怪,邊緣沒有被複制。可能不知何故,邊緣不在那裏。

你可以嘗試打印源圖形和使用下面的代碼生成的圖表:

#include <boost/graph/graph_utility.hpp> 
std::cout << std::endl << "graph g2" <<std::endl; 
boost::print_graph(g2); 

(同樣地,對於之前和之後的函數調用G1)。