0

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

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

  • 我可以放心地忽略图中的循环。
  • 我知道我形成的每条路径都会阻塞其他路径。
  • 因此,我无法一次访问所有可到达的边缘,因此需要多次访问。

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

我想每次通过访问“许多”边,这样我可以减少通过的总数,但我并不严格需要最小化通过的数量。

关于算法的任何建议来实现这一点?听起来有点像路由检查问题,只是我的图表是有向的。

4

1 回答 1

1

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

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

为边缘分配一些初始权重并应用随机生成树算法。然后减少访问边的权重(实际上是相对概率)。很可能会访问所有边缘。

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

于 2013-11-06T01:27:46.420 回答