从源节点到目标节点正好遍历n条边,找到最长路径

时间:2017-08-20 04:37:05

标签: algorithm graph

假设我们有一个加权图表,它是定向循环。每个节点都有一个指向每个其他节点的边。没有边缘将节点连接到自身。

现在我们有了一个源节点和一个目标节点。我必须从源节点开始并准确遍历 n edge 并最终到达目标节点。其中 n 是一些任意正整数(可能大于图中节点的数量)。

当我们遍历边缘时,我们将其添加到总和(边权重)。现在,我们到达目标节点的路径可以有周期。我们如何才能最大化总和

1 个答案:

答案 0 :(得分:0)

如果您不允许循环,则问题是NP完全 - 请参阅https://en.wikipedia.org/wiki/Longest_path_problem

假设您被允许包含周期的路径,例如A,B,C,B,C

对于i = 1..N计算,对于每个节点,终止于该节点的长度为i的最长路径的长度。在N之前保存节点的长度和标识。

Case i = 0只是一个长度为0的路径,前一个节点为每个节点为null。

通过考虑每个节点,终止于该节点的每个边缘,从情况i中求出情况i + 1.

最后选择步骤N的节点,其中最长路径终止,并使用先前节点的记录追溯。

(以上实际上是为了计算任意两个节点之间的最长路径,因为我误读了这个问题,但你可以在开头修改它,只扩展从源节点开始的路径,最后只考虑以目的节点结束的路径。)

在问题ab = 1,ac = 2,bd = 10,cd = 1之后添加的示例找到从A到D的最长的两步路径。

i = 0以A

开头

i = 1到B的最长路径是长度1,最后一次访问A.最长到C是长度2,最后一次访问A

i = 2最长的A是最后一次访问的长度4.最长的D是11最后一次访问B(B的最大值为1 + 10,C的最大值为2 + 1)。

我们想要长度2,所以我们在这里停下来并为D计算答案。