【问题标题】:Graph theory, all paths with given distance图论,给定距离的所有路径
【发布时间】:2017-10-08 13:00:32
【问题描述】:

所以我发现了一个问题,即旅行者可以在图中旅行一定距离,并且所有双向边都有一定的长度(距离)。假设在某个边缘(任一方向)旅行时,您会得到一些钱/礼物(所有边缘都有问题),因此您必须找到在给定的旅行距离内可以收集的最大金钱。基本问题是如何找到给定距离的所有可能路径(图中可能存在循环),在找到所有可能路径后,收集的最大资金路径就是答案。注意:您想出的任何可能的路径都不应该有循环(直线路径)。

【问题讨论】:

  • 起点和终点节点给定了还是需要优化?
  • not given .. 优化所有给定路径长度的源和目的地。

标签: graph dynamic-programming np-hard


【解决方案1】:

给你一个无向连通图,边上有双重权重(距离和奖励)。 给你一个与可能距离相对应的固定数字 d。

对于每一对节点(u,v),u不等于v,你在找

  • 连接 u 和 v 的所有路径 {P_j} 没有总距离为 d 的重复节点。
  • {P_j} 的路径 {P_hat(j)} 子集,其奖励最大。

为了获得第一个,我会尝试使用 Floyd-Warshall 算法的修改版本,在该算法中,您不寻找最短路径,而是寻找任何路径。 Floyd-Warshall 使用基于考虑 u 和 v 之间的“中间节点”w 的策略,并递归地找到最小化 u 和 v 之间距离的路径。

您可以这样做,同时采用所有路径而不是排除最小化,注意将您已经在距离矩阵中访问过的节点放入inf,并在运行时排除递归中的每个部分路径距离大于 d 或到达终点(它们连接 u 和 v)且距离小于 d。

如果给定一个可能的距离 [d, D] 的区间,而不是单个值 d,则可以推广,因为在第二种情况下,您可能会一直得到空集。

对于第二步,您只需比较在解决第一步中找到的每条路径的奖励,然后选择最好的。

更多的是建议的方向而不是完整的答案,但我希望它有所帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-11
    • 1970-01-01
    • 2021-04-07
    • 2011-04-30
    • 1970-01-01
    相关资源
    最近更新 更多