在无向图(boost)中查找循环并返回其顶点和边

时间:2009-12-17 15:03:18

标签: c++ boost graph

我需要一个在无向图(boost)中找到一个循环并返回其顶点和边的函数。它只需返回图中一个周期的顶点/边。 我的问题是 - 使用boost进行此操作的最佳方法是什么?我没有使用它的经验。

3 个答案:

答案 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功能,可以找到强大的组件
  • 找到所有周期,而不是周期,是一个更难的问题,我相信Boost.Graph目前没有实现这个目标