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