【发布时间】:2021-12-30 23:07:48
【问题描述】:
我正在使用 Boost Graph 在 C++ 中实现一个算法。
我想在v(所以,它的所有邻居)附近找到所有顶点,然后更改其属性,最后清除所有边缘。
我在 Boost 中找到了函数 adjacent_vertices(v,g)(其中 v 是顶点,g 是图形)来查找所有邻居。然后我想对它们都应用函数clear_vertex(v,g)(同样,v 是顶点,g 是图形)来删除它们的所有边。
在这一点上,我有一个问题。 adjacent_vertices函数返回一对adjacency_iterator,而对于clear_vertex函数我需要vertex_iterator(如果我正确地理解这些功能如何工作)。
那么,有一种简单的方法可以将adjacency_iterator 转换为vertex_iterator?如果我保留@ 987654331并将其传递给clear_vertex函数,问题就是它不会删除边缘(或随机将它们删除到某个顶点)。
我的错误代码是:
Graph::adjacency_iterator v,vend;
for(boost::tie(v,vend) = neighbours; v != vend ; ++v) {
clear_vertex(*v,g2);
}
【问题讨论】:
-
请注意,相邻顶点可能只包括出边。检查文档以了解使用
bidirectionalS是否会改变 -
实际上,这并没有什么不同:godbolt.org/z/Kd79G414E
-
啊,好吧,事实上在我的代码中,所有的代码都适用于directedS