如何在双向图中找到两条不相交的路径?

时间:2018-06-19 19:10:24

标签: c++ c opnet

我有一个包含14个节点和21个链接的图。该图显示了一个光网络。这些链接是双向的,每个链接上都有一些资源。假设有一条从源到目的地的工作路径,该路径携带包含数据的数据包并使用一些资源(遍历该链路的一定带宽)。对于每个源和目标,如果发生链路故障,我必须同时同时建立工作路径和保护路径,但是它们必须是链路不相交的(它们不能遍历任何公共链路)

例如,我通过路由<1,2,3,4>从节点1向节点4发送一个数据包作为工作路径。  如果链路1-2失败,我必须通过预先建立的保护路径发送数据包,该保护路径与工作路径不相交。例如我的保护路径可能是<1,9,3,4>。

目的是用C / C ++编写代码以找到与工作路径不相交的保护路径。实际上,我不知道这样做的想法。任何帮助将不胜感激。

这是我的一部分代码,其中我已将资源分配给工作路径,我不知道在必须与工作路径不相交的情况下如何才能建立保护路径。

UPDATE drivessold 
JOIN specs ON drivessold.SKU = specs.SKU_num
SET drivessold.color = specs.color, 
drivessold.speed = specs.speed;

1 个答案:

答案 0 :(得分:0)

  

我有一个包含14个节点和21个链接的图。 [...]对于每个来源和目的地,我必须建立一个工作和   链路故障时提前同时保护路径   但是它们必须是链接不相交的(它们不能遍历任何公共链接)

首先请注意,您提供的信息绝不会确保任何两个特定节点之间甚至只有一条路径,少了两个不相交的节点。但是,如果以一定的方式构造图,以确保每对节点之间有两条不相交的路径,那么最好的选择可能是利用您对该结构的了解来找到所需的路径对。例如,如果您知道该图包含一个遍历所有节点的循环,则可以通过沿相反方向从一个方向到另一个方向遍历该循环,从而在每个节点对之间获得两条不相交的路径。

另一方面,如果您试图在不存在的路径对中找到它们,而在其他地方确定不存在这样的对,那么您有一些选择。

从概念上讲,最简单的方法是为每对节点确定它们之间的所有所有非环路路径,然后查找只有相同的起始节点和结束节点的两个路径。您可以使用深度优先或宽度优先的搜索进行路径枚举。这对一般图形来说在计算上具有挑战性,因为路径数量呈指数比例缩放,但是对于您描述的相对较小和相当稀疏的图形,它可能会起作用。

您可以通过针对发现的所有新路径,对所有先前发现的路径进行测试,来完善该方法。您可能以这种方式有时会发现可用的对而无需枚举每条路径。如果执行此操作,则基于BFS的方法将比基于DFS的方法更快地找到可用对。当没有不相交的对时,这仍将枚举节点之间的所有路径。

我可以想象更复杂的方法,在这些方法中,您一起搜索不相交的,而不是搜索单个路径,但是我倾向于认为这些方法由于涉及大量内容而往往效率低下重复的工作。这表明可以通过动态编程来解决,但在这一点上,我沉迷于推测。

无法可靠地做的就是简单地选择一条路径,然后寻找遍历其余节点的另一条路径。完全可能有合适的路径对,但是您选择的第一个路径不是该对的成员。