【发布时间】: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) 相同吗?
谢谢。 ;)
【问题讨论】: