如何从有向无环图中找出最大可能点?

时间:2012-04-28 06:53:25

标签: graph

对不起,标题不好。我是图算法的新手。

我好几天都遇到了问题。如果有向非循环图的所有节点都是加权的,而权重可以是负数,那么如何找出权重总和最大的集合呢?

例如,我们有一个包含5个节点的图表 -

  • 节点1:权重30,具有指向节点4的边缘
  • 节点2:权重25,具有指向节点4,5的边缘
  • 节点3:重量-65,没有边缘
  • 节点4:权重-20,边缘到节点5
  • 节点5:重量2,没有边缘

在找出最大点时,例如,如果选择了节点1,则必须选择节点4和5(因为它们与节点1直接/间接相邻)。

所以我们可以拥有的最大点是 - (30-20 + 2)+(25)= 37

表示节点1和后代4,5,然后表示节点2(不再考虑节点4,5)

我希望我能清楚地解决问题。有人能告诉我如何实现这个目标吗?

1 个答案:

答案 0 :(得分:0)

如果我正确理解你的问题......你想要的是找到一个节点,它可以最大化该节点可以达到的值的总和。

这是一些伪造的代码,可以为你做这个

def maxVertex(Vertices):
    for vertex in reversed_topological_sorted(Vertices):
         vertex.value = vertex.weight
         if vertex.neighbors:
                vertex.value += sum( other_vertex.value for other_vetrex in vertex.neighbors )

     return max(Vertices,key=lambda vertex: vertex.value)