【问题标题】:Maintaining iterator in Boost::graph while performing DFS在执行 DFS 时在 Boost::graph 中维护迭代器
【发布时间】:2012-08-14 06:01:03
【问题描述】:

Boost:graph 库的大多数示例通过调用 boost 的深度优先搜索实用程序来执行深度优先搜索。在创建顶点和边之后,在图上调用 DFS 以深度优先的方式遍历整个图,如果我们有与之关联的访问者方法,它将调用访问者方法来执行一个操作,对于遍历的每个节点。

我正在寻找的是一种在图上维护迭代器的方法,当客户端调用“next()”时,迭代器将移动到下一个顶点,而不是一次性遍历图遍历到 DFS 并在再次调用 next 时,迭代器将移动到 DFS 指示的下一个顶点。

有没有使用 boost:graph 执行上述操作的示例?

谢谢

【问题讨论】:

  • 如果我没记错的话,人们对可中断的 DFS 很感兴趣。您可能还可以编写一个 DFS 迭代器。适应迭代器框架可能有点痛苦,但并非不可能。
  • @pmr - 感谢您的回复。以空间为代价解决此问题的另一种方法是在执行 DFS 时将顶点推入队列,然后 next() 只会将下一个元素从队列中取出。

标签: c++ boost graph iterator depth-first-search


【解决方案1】:

不幸的是,boost::graph API 是基于访问者的,即回调。原则上,将其转换为迭代器的唯一方法是协程,而 C++ 没有标准。

【讨论】:

    猜你喜欢
    • 2020-03-01
    • 2022-08-13
    • 2023-03-21
    • 1970-01-01
    • 2011-09-20
    • 1970-01-01
    • 2013-05-01
    • 2014-05-17
    • 2014-01-28
    相关资源
    最近更新 更多