动态编程:n个节点

时间:2017-06-19 21:45:18

标签: algorithm graph

首先,我想说这是我关于Stack Overflow的第一个问题,如果我的问题没有被正确询问,或者这是一个我不应该问的问题,请告诉我,我可以解决它(我已经阅读了导游,但你永远不知道!)

让我们开始吧:我试图在有向无环和加权图中制作算法(权重可以是负数或正数)。该算法必须找到从特定节点开始具有最大权重的路径,并且该路径可以通过最多N个节点(如果它将获得更好的权重,则可以使用更少的节点)。

我明白我必须使用动态编程才能做到这一点,但我不知道如何做到这一点。我做了很多研究,而且我只提出了从节点u到节点v"的最长路径算法。但这并不是我想要实现的目标。

我熟悉Dijkstra的算法,但我不认为这是我应该使用的。

非常感谢您阅读我,并提前感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

输入v,z的算法:

  1. 找到强连接组件,知道你是否有从节点v开始的正重量循环,你可以返回无限

  2. 使用dfs

  3. 对有向图进行排序
  4. 从叶子节点开始并返回最大值(weight_of_node(leave1,z),.....)

  5. 对于当前节点打印它并选择由递归函数计算的权重最大的父节点。如果节点只有一个父亲选择这个父亲,如果该节点是v,则返回v的权重并打印它

  6. 现在打印所有选定的节点

  7. *计算节点的重量时

    `weight_of_node(x,z):

    如果z == 0

       return - infinite 
    

    返回最大值(weight_of_node(father_node1),weight_of_node(father_node2),...)+ current_node_weight`,z - 1)