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

Graph 如何从有向无环图中找出最大可能点?,graph,Graph,对不起,标题不好。我不熟悉图形算法 我被一个问题困扰了好几天。如果一个有向无环图的所有节点都有权,而权可以是负的,那么我如何找出一个权重之和最大的集合呢 例如,我们有一个包含5个节点的图- 节点1:权重30,具有指向节点4的边 节点2:权重25,具有指向节点4,5的边 节点3:权重-65,没有边缘 节点4:权重-20,边到节点5 节点5:权重2,它没有边 在找出最大点时,例如,如果选择了节点1,则必须选择节点4和5(因为它们与节点1直接/间接相邻) 所以我们能得到的最大点是- (30-20+

对不起,标题不好。我不熟悉图形算法

我被一个问题困扰了好几天。如果一个有向无环图的所有节点都有权,而权可以是负的,那么我如何找出一个权重之和最大的集合呢

例如,我们有一个包含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)


我希望我把问题说清楚。有人能告诉我如何做到这一点吗?

如果我正确理解了你的问题。。。您想要的是找到一个使该节点能够达到的值之和最大化的节点

下面是一些psuedo代码,可以为您执行此操作

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)

恐怕还不完全清楚。目标是选择一组起始节点,使这些起始节点和从该起始集可到达的所有附加节点的权重之和最大?不,这不是一个家庭作业。我试图解决一个图形关系问题,找到了图形的SCC,并将其应用于那些连接集。@Jeffrey Hantin:不,你可以选择任何顶点的组合,同时确保点的总和最大。实际上,在我看来,他指的是可能有多个起始节点的集合,不计算任何可到达的节点两次。是的,这就是我想要做的。实际上,用这种方法得到的最大点应该足以解决这个问题。