首页 文章

boost图库:合并无向图

提问于
浏览
1

这是我在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个边 .

我希望对于比我更先进的人来说,这个错误很容易找到 . 老实说,我甚至不了解功能所做的一切 . 感谢你们!

1 回答

  • -1

    如果将顶点从g2复制到g1中,则边缘未被复制听起来很奇怪 . 可能不知何故边缘不在那里 .

    您可以尝试使用以下代码打印源图和结果图:

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

    (类似于函数调用之前和之后的g1) .

相关问题