【发布时间】:2013-12-17 10:45:31
【问题描述】:
这是我在 Stackoverflow 上的第一篇文章。所以如果我不小心违反了任何发帖规则,请不要对我太苛刻。
我正在与 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 条边。
我希望对于比我先进得多的人来说,这个错误很容易找到。老实说,我什至不了解该功能所做的一切。谢谢各位!
【问题讨论】:
-
SSCCE 可能会有所帮助。