我有一个有向图,每个节点都有一个分数。从节点开始,我需要找到可以通过跟踪路径获得的最高分数。并非所有节点都可以是最终节点。此外,还可以重新访问节点,但只有第一次访问才能计算得分。如何计算可达到的最高得分?
答案 0 :(得分:4)
首先,您可以找到图表的strongly connected components。然后你可以建立一个图的凝结。
凝结中的每个顶点的分数可以等于初始图中顶点分数的总和。
蓝色数字显示初始图表中每个顶点的分数。黄色 - 图形凝结。
如果凝结的某些顶点包含最终节点,也将其标记为终端。您还将在凝结中将每个图形顶点映射到顶点。
连接组件的概念很重要,因为如果您发现自己位于组件的一个顶点,则可以轻松访问组件的所有其他顶点以最大化分数。您可以随意重新访问每个顶点。
冷凝本身是有向无环图。您现在可以使用深度优先搜索来保持函数
来遍历凝聚图F v = 0 - 如果V没有可到达的终止顶点(下面图片的右下顶点)
F v = MAX i (F child v,i )+得分 v - 否则
红色圆圈显示初始图形中的顶点和凝结视为终端。 绿色数字表示缩小图中每个顶点的F值。
你的问题的答案是凝结中顶点的F值,它对应于初始图中的起始顶点。总时间复杂度为O(N + M),其中N是顶点数,M是初始图中的边数。