所以我发现旅行者可以在图表中移动一定距离并且所有双向边缘都有一定长度(距离)的问题。假设在某个边缘(任一方向)旅行时,您会获得一些金钱/礼物(所有边缘都有问题),因此您必须找到可以为您可以旅行的特定距离收集的最大金额。基本问题是如何找到具有给定距离的所有可能路径(图中可能存在循环),并且在找到所有可能的路径之后,收集最大钱的路径将仅仅是答案。注意:您提出的任何可能路径都不应该有循环(直路径)。
答案 0 :(得分:0)
您将获得一个无向连接的图形,边缘具有双倍重量(距离和奖励)。 您将获得与可能距离相对应的固定数字D.
对于每对节点(u,v),你不等于v,你正在寻找
要获得第一个,我会尝试使用Floyd-Warshall算法的修改版本,在这里您不会寻找最短的,但是对于任何路径。 Floyd-Warshall使用基于考虑中间节点"的策略。 w和u之间的w,递归地找到最小化u和v之间距离的路径。
您可以执行相同的操作,同时取所有路径而不是排除最小化,从而将距离矩阵中已经访问过的节点放入inf
,并在运行时将每个部分路径排除在递归,其距离大于d或到达终点(它们连接u和v)并且其距离小于d。
如果给出了可能距离[d,D]的间隔,而不是单个值d,则可以推广,如在第二种情况下,您可能会一直得到空集。
对于第二步,您只需比较在解决第一步时找到的每条路径的奖励,并选择最佳路径。
更多是建议的方向而不是完整的答案,但我希望它有所帮助!