boost图库:合并无向图
boost graph library: Merging undirected graphs
这是我关于Stackoverflow的第一篇文章。所以,如果我无意中违反了任何发布规则,请不要对我太苛刻。
我正在与BGL作战。对于我大学的一个项目,我需要一些与图形相关的东西。因此,我需要的一个重要函数是合并两个无向图。
我已经搜索了相关的问题,发现了这些主题:
使用提升图合并图
将一个图(邻接列表)复制到另一个
第一个对我不起作用,因为我总是在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也是类似的)。
相关文章:
- 为什么提升图库的 read_graphviz() 函数会改变节点的索引
- 提升图库示例 凯文培根的六度:示例中的 Vertex() 是什么
- 安卓工作室 |CPP 文件错误错误: 位图库中对"AndroidBitmap_unlockPixels"的未定义引用
- 可以在提升图库中即时计算边
- C Koala图库 - 了解访问数据结构的语法
- 柠檬图库C - 使用循环的addNode
- 围绕Boost图库中的捆绑属性进行设计
- Fruchterman-Reingold的吸引力是如何与Boost图库协同工作的
- Boost图库undirected_Graph:如何指定顶点类型(例如int)
- 将 Dijkstra 算法与柠檬图库结合使用
- 柠檬图库C++ - 有向图
- boost图库:合并无向图
- Lemon图库C++将值映射为函数参数错误
- Boost图库:可以将绑定属性与内部属性相结合
- boost图库图的构建;迭代地添加边属性
- 使用Boost图库从多个来源进行广度优先搜索
- 为什么Boost图库在删除顶点时会使所有迭代器无效
- 柠檬图库C++节点中添加坐标
- 图的剪切集,Boost图库
- 提升图库中的顶点描述符和索引有什么区别?