c++ - boost 图形库 : Merging undirected graphs

标签 c++ boost graph merge

这是我在 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 条边。

我希望对于比我高级得多的人来说,错误很容易被发现。老实说,我什至不了解该功能所做的一切。谢谢大家!

最佳答案

如果顶点从 g2 复制到 g1,边没有被复制听起来很奇怪。可能不知何故边缘不存在。

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

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

(对于函数调用前后的 g1 也是如此)。

关于c++ - boost 图形库 : Merging undirected graphs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20632056/

相关文章:

C++ boost,等待来自不同线程的var init

c++ - 如何以高效快捷的方式为数字添加前缀和删除?

python - 将 y 轴点匹配在一起

C++ Directx 11 渲染问题

c++ - SQLite 与 Android NDK

c++ - 为 json 数组中的所有 child boost ptree 节点

python - 无法在 Windows 7 中安装图形工具

algorithm - 图表数据的想法

algorithm - 预处理竞争中的最短路径

c++ - 使用C++ SDK从OPCUA读取自定义节点-字符串作为节点标识符