在有向图中计算具有最高分数的路径

时间:2017-02-26 16:43:55

标签: algorithm graph path directed-graph

我有一个有向图,每个节点都有一个分数。从节点开始,我需要找到可以通过跟踪路径获得的最高分数。并非所有节点都可以是最终节点。此外,还可以重新访问节点,但只有第一次访问才能计算得分。如何计算可达到的最高得分?

1 个答案:

答案 0 :(得分:4)

首先,您可以找到图表的strongly connected components。然后你可以建立一个图的凝结

[graph_condensation]

凝结中的每个顶点的分数可以等于初始图中顶点分数的总和。

scores

蓝色数字显示初始图表中每个顶点的分数。黄色 - 图形凝结。

如果凝结的某些顶点包含最终节点,也将其标记为终端。您还将在凝结中将每个图形顶点映射到顶点。

连接组件的概念很重要,因为如果您发现自己位于组件的一个顶点,则可以轻松访问组件的所有其他顶点以最大化分数。您可以随意重新访问每个顶点。

冷凝本身是有向无环图。您现在可以使用深度优先搜索来保持函数

来遍历凝聚图

F v = 0 - 如果V没有可到达的终止顶点(下面图片的右下顶点

F v = MAX i (F child v,i )+得分 v - 否则

F_calculated

红色圆圈显示初始图形中的顶点和凝结视为终端。 绿色数字表示缩小图中每个顶点的F值。

你的问题的答案是凝结中顶点的F值,它对应于初始图中的起始顶点。总时间复杂度为O(N + M),其中N是顶点数,M是初始图中的边数。