【问题标题】:Boost Graph Library Undirected Graph No parallel edges enforcementBoost Graph Library 无向图 无平行边强制
【发布时间】:2010-09-15 00:02:54
【问题描述】:

我正在使用 Boost Graph Library 来处理一个无向图,并声明我的图有

typedef property<vertex_index_t, int, property<vertex_name_t, string> > VertexProperty;
typedef adjacency_list<vecS, setS, undirectedS, VertexProperty > UndirectedGraph; 

如您所见,OutEdgeList 是 std::set 类型,我选择它是因为文档说这种类型将强制不存在平行边。

现在,我的程序读取一个文本文件,该文件指示节点之间的边,如果以前没有看到,则创建节点并添加它们之间的边。

我最近用大量数据运行代码,发现奇怪的结果。几个小时后,我发现一些用户的度数比图中的顶点数多,所以我尝试了一个简单的文本文件的代码,该文件只描述了同一对节点之间的两条边,但源、目标相反,这样boost 将执行以下操作:

add_edge(A,B)
add_edge(B,A)

并注意到 Boost 最终添加了两个边缘。 out_degree 对它们都返回 2。

现在,问题是:我做错了吗?对于以 setS 作为 OutEdgeList 类型的无向图,add_edge(a,b) 不应该与 add_edge(b,a) 相同吗?

谢谢。 ;)

【问题讨论】:

    标签: c++ boost


    【解决方案1】:

    问题在于 OutEdgeList 是第一个模板参数,而不是第二个,所以我实际上使用的是 vecS 而不是 setS。

    【讨论】:

    猜你喜欢
    • 2011-09-23
    • 1970-01-01
    • 1970-01-01
    • 2011-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-19
    相关资源
    最近更新 更多