找到比给定距离短的所有备用路径

时间:2013-09-07 00:13:11

标签: algorithm graph

图形算法问题。

我有一张图表,用于表示道路网络。所以它有循环(环形交叉口将是一个微不足道的)。一些边缘也是双向的,一些是单向的(单向街道)。边缘按其长度加权。

假设我有两个节点并且已经计算了它们之间的最短路径。我想要做的是找到连接两个节点的所有其他路径,这些路径比某个距离X短。将这些路径称为“替换”。

ascii art中的一个例子如下,我用字母标记边缘,用数字标记节点。

         F
      5----6  
   E /      \ G  
    3--------4
   /    D     \
B /            \ C
 1--------------2
        A              

假设我的路径覆盖边缘A,从1> 2开始,我想找到替代品。如果它的长度小于X,则该路径的一个替代是BDC。BEFGC是另一个。

另一个示例路径是连接节点1-> 4的BD。那个的替代品是AC。

更多要求:

  1. 替代词不应包含主路径的任何部分。因此,如果主路径为A,则包含A的任何备用路径都不是有效的备用路径。在上面连接1-> 4的BD示例中,BEFG不是有效的备用,因为它包含在主路径中的B。
  2. 替代品不应该有内部循环。例如,连接1-> 2:BDGFEDC不允许使用此备用路径,因为它遍历边缘D两次。
  3. 谢谢!

1 个答案:

答案 0 :(得分:1)

如果你运行Dijkstra的算法来找到最短的路径,你有一个表,它为每个节点提供从源到该节点的最短距离。我将从图中删除最短路径上的点,运行Dijkstra算法,然后从目标进行深度优先搜索,每当您正在调查的路径成为一个周期时终止搜索,或者距离的总和到目前为止的路径,从当前节点到源的最短距离大于X.

每次实际到达源节点时,您都​​可以打印出目前为止的路径。