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

Algorithm 查找比给定距离短的所有备用路径,algorithm,graph,Algorithm,Graph,图算法问题给你 我有一个图形,用来表示道路网络。因此,它有循环(一个迂回将是一个微不足道的)。此外,有些边缘是双向的,有些是单向的(单向街道)。边按其长度加权 假设我有两个节点,并且已经计算了它们之间的最短路径。我想做的是找到连接两个节点的所有其他路径,这两个节点的距离小于某个距离X。将这些路径称为“备选路径” 下面是ascii艺术的一个例子,我用字母标记了边缘,用数字标记了节点 F 5----6 E / \ G 3--------4

图算法问题给你

我有一个图形,用来表示道路网络。因此,它有循环(一个迂回将是一个微不足道的)。此外,有些边缘是双向的,有些是单向的(单向街道)。边按其长度加权

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

下面是ascii艺术的一个例子,我用字母标记了边缘,用数字标记了节点

         F
      5----6  
   E /      \ G  
    3--------4
   /    D     \
B /            \ C
 1--------------2
        A              
假设我有一条覆盖边A的路径,从1->2开始,我想找到替代者。如果BDC的长度小于X,则该路径的另一个备选路径是BDC。BEFGC是另一个路径

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

更多要求:

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

  • 谢谢

    如果您运行Dijkstra算法来查找最短路径,那么您就有了一个表,该表为您提供了每个节点到源节点的最短距离。我会从图中删除最短路径上的点,运行Dijkstra算法,然后对目标进行深度优先搜索,每次您当前正在调查的路径变成一个循环时终止搜索,或者,到目前为止路径上的距离与从当前节点到源的最短距离之和大于X


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

    这与查找常规路径似乎没有太大区别,您已经可以这样做了。Dijkstra的算法支持找到给定长度下的所有路径,也不应该给出循环。只需在没有主路径的子图上运行它?是的,我需要第二个clwhisk。找到长度X以下的所有路径,删除这些路径段,在剩余图形中找到的任何路径都应满足您的标准。是吗?是的,这很有效。傻,我没想到。