对不起,标题不好。我是图算法的新手。
我好几天都遇到了问题。如果有向非循环图的所有节点都是加权的,而权重可以是负数,那么如何找出权重总和最大的集合呢?
例如,我们有一个包含5个节点的图表 -在找出最大点时,例如,如果选择了节点1,则必须选择节点4和5(因为它们与节点1直接/间接相邻)。
所以我们可以拥有的最大点是 - (30-20 + 2)+(25)= 37
表示节点1和后代4,5,然后表示节点2(不再考虑节点4,5)
我希望我能清楚地解决问题。有人能告诉我如何实现这个目标吗?
答案 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)