使用独立路径访问图形边

时间:2013-11-05 21:16:44

标签: graph graph-theory traversal

给定一个包含多个起始节点和多个终端节点的有向图,我需要形成访问每个可到达边的路径,但是在单次传递期间我不能多次访问任何边(或顶点)。 [这是通过从开始节点到终端节点发送信号来电测试网络中的每个连接,但我不能允许路径短路。]

因为我无法在一次通过中重新访问边缘:

  • 我可以安全地忽略图表中的周期。
  • 我知道我形成的每条路径都会阻挡其他路径。
  • 因此,我无法在一次通过中访问每个可到达的边缘,因此需要多次通过。

从上下文来看,我知道最小遍数将是进入任何顶点的最大边数。一旦我完成一个给定的传球,我可以自由地重新访问之前传球中访问过的边缘,但是我最想访问的边缘是从未访问过的边缘。

我想访问" 很多"每次传球的边数,这样我就可以减少传球次数,但我并不需要尽量减少传球次数。

有关算法的任何建议吗?它听起来有点像route inspection problem,除了我的图表是直接的。

1 个答案:

答案 0 :(得分:1)

从问题中不清楚您是否有一个或多个起点以及一个或多个终点。为简单起见,我假设“一对多”网络。然后你的要求(不再访问任何边或顶点一次)意味着你实际生成了具有给定根的图形的生成树。

想到一个简单但不是100%的解决方案如下:

为边缘指定一些初始权重并应用random spanning tree algorithm。然后减少访问边缘的权重(实际上是相对概率)。很可能会访问所有边缘。

在“多对多”连接的情况下,您可以使用不同的起点。如果某些源未连接到某些接收器,则算法将引发异常。如果这不是您检查的内容,则可以先运行常规DFS,将所有可到达的顶点收集到某个集合中;然后你可以使用这个集合作为过滤器来形成一个boost :: filtered_graph。