我需要一个在无向图(boost)中找到一个循环并返回其顶点和边的函数。它只需返回图中一个周期的顶点/边。 我的问题是 - 使用boost进行此操作的最佳方法是什么?我没有使用它的经验。
答案 0 :(得分:3)
我不知道Boost,但here是S.O.的答案。在概念层面:
这是我的猜测:使用BFS浏览图表。在每个节点上记下它的“深度”并添加对“父”的引用(即使有很多循环也应该只有一个)。一旦发现从A到B的链接创建了一个循环(因为B已经着色),那么: 1)从A回溯到根,沿途保存边/顶点。 2)从B回溯到根,沿途保存边/顶点。 3)添加A,B,AB 4)“排序”以恢复正确的顺序。考虑使用LIFO(堆栈)1)和FIFO 2)
我希望这会有所帮助。
答案 1 :(得分:2)
通常,您可以通过深度优先搜索来执行此操作。我并不熟悉boost的图形工具,但this page将为您提供算法的概述。
答案 2 :(得分:1)
如果你想找到一个周期,那么使用深度优先搜索就可以了。 DFS访问者具有back_edge功能。当它被调用时,你在循环中有一个优势。然后,您可以遍历前一个映射以重建循环。请注意:
strong_components
功能,可以找到强大的组件