【问题标题】:Boost Graph undirected traversal of directed graphBoost Graph 有向图的无向遍历
【发布时间】:2011-04-18 13:25:13
【问题描述】:

我正在使用 Boost 图表。我的图表的边缘有一个有向的意义。这就是我选择有向图的原因。但是,当我遍历图表时,我通常想这样做而忽略方向。但是,我还没有找到一个解决方案来遍历我的图表,例如使用内置的深度优先搜索。

是否有不涉及复制整个图表的解决方案?

如果没有:我不确定我的图表是否实际上是由自然引导的。也许我应该使用无向图,并添加一些“方向”属性?不过,我不确定如何做到这一点(只要将源/目标 vertex_descriptors 附加到边缘显然会在图形更改后中断)。有可能这样做吗?这有意义吗?

谢谢

【问题讨论】:

  • 我不确定 Boost Graphs 的实现。你能稍微描述一下你最初的任务吗?
  • 嗯,基本上我有代表 3d 空间中位置的节点。现在从节点 A 到节点 B 的边附加了一个从坐标系 A 变换到 B 的变换矩阵。我的算法对该图的节点位置进行了一些优化。作为预处理步骤,我需要使用 BFS/DFS/whatever 遍历图形并计算一些东西——我不关心方向。

标签: c++ boost graph


【解决方案1】:

我对 Boost Graphs 的实施一无所知,但我可以在您的情况下看到两个选项。

  1. 如果您的图不大,您可以先创建一个无向图,计算您的“某物”,然后创建一个有向副本。这应该需要O(n) 时间,并且不会影响整体性能。
  2. 使用非有向图并添加一些关于边缘方向的信息,例如指向源顶点的指针。此解决方案可能会使您的算法更复杂一些,但您可以避免任何数据复制并在大图上获得一些性能。

【讨论】:

  • 感谢您的回复。嗯,1)我基本上同意它的解决方案。然而它有点难看,因为基本上所有算法都可以在没有这个的情况下执行——信息就在那里。但我想如果我找不到任何其他方法,我将不得不考虑这个解决方案。至于2)我已经在原始问题中提出了这个建议......但是这里的问题是如何在boost graph中做到这一点,因为你不能在边缘使用源vertex_descriptor(我知道你写过你不熟悉BGL...也许其他人在这里有一个想法)
猜你喜欢
  • 2011-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多