DAG

时间:2015-06-03 14:49:49

标签: algorithm matlab graph

我有一个带加权边的有向无环图。我的目标是在“第一”和“最后”级别之间的所有路径中找到边缘乘积的总和。例如,在这种情况下,这将是2 * 3 + 2 * 1 + 4 * 2 + 4 * 4 + 3 * 3 + 3 * 1 + 2 * 2 + 2 * 4 = 56.在实际图表中,我有20-30级。有没有有效的方法来做到这一点?

Graph

2 个答案:

答案 0 :(得分:2)

您可以使用简单的DFS来解决此问题:

    Node s; // starting node
    Integer result = 0
    Function sumProduct(Node currentNode){
            mark currentNode as visited
            for each connected node to currentNode which is not visited do

                 result += edgeCost(currentNode to neighbor) + sumProduct(Neighbor);
            end for

                 return result
    }

// call function with the starting node: 

sumProduct(s);

答案 1 :(得分:1)

尝试动态编程 - 从最后一级开始然后向后移动。对于每个节点v,计算从该节点到最后一级的路径的总和S [v]。

对于最后一个级别,对于所有v,此S [v] = 0。 如果您对级别i + 1中的所有节点都有S [v],则计算级别i中的所有节点:S [u] = sum {v,s.t。 (u,v)是边缘权重(u,v)* S [v]。