如何找到从单一来源到所有最终目的地的最长路径 即对于源i1,给出i1之间最长的路径 - > o1和i1 - > O 2。
上图中描述的图例如下: (i1,i2)是起始节点 (o1,o2)是结束节点 (1-8)是子图 边可能有+ ive / -ive权重
此网络中最长的路径按以下顺序排列:
最差路径:i1 - > 1 - > 4 - > O1
然后,所有路径i1 ... - > ...... o1
然后i1 - > 5 - > 6 - > O2
需要一种方法来忽略(i1 - > 3)或(3 - > 4)子网的选择,即使它们比i1长 - > 5
答案 0 :(得分:4)
Wikipedia救援!他们关于这个问题的页面表明,在一般情况下,你的问题是NP-Complete。但是,由于您有一个定向的非循环图形,您可以反转所有边缘权重并运行Bellman-Ford algorithm来解决它。 B-F算法通常在图中计算单源最短路径。使用反向边权重,它应该产生最长的路径。
答案 1 :(得分:0)
我相信以下内容将为您提供到达目的地的最大步骤数(不是实际路径,只是步数)。这不考虑边缘权重。这可以通过从src
开始合并节点,直到除了目标节点之外没有剩下的邻居。
longestPath (src, dest) =
if (neighbors(src) == [dest]) then 1
else 1 + longestPath(newNode(concat (map neighbors (neighbors src))), dest)