繁体   English   中英

查找访问树的所有节点的最低成本

[英]Find minimum cost to visit all nodes of a tree

给定树的根,其中每个边具有相关的成本。 找到访问树的每个节点的最低成本。

我想到的一个递归解决方案是:

  1. 当节点是叶返回0时的基本情况。
  2. 对于节点的每个子节点c递归地计算成本。
  3. 将所有这些成本加起来,并且从节点到子节点两次添加边缘成本两次(因为我们需要回溯)。
  4. 减去具有最大成本的孩子的边缘成本。(“贪婪” - 我们不想从具有最大成本的孩子回溯)。

这种方法是否正确?

有没有更好的方法来解决这个问题?

  1. 从节点访问所有子树并返回到节点,它将花费属于该子树的所有edges * 2
  2. 所以我们应该在树中找到路径成本最大的路径。 我们只是通过路径,如果我们遇到一些不在路径中的节点,我们只是访问它并返回 因此路径中的边将只访问一次,剩余边将访问两次。
  3. 如何找到最高成本的路径? 因为它是一棵树,你可以递归地找到它。

答案应该是:

sum(cost(edge)*2) - sum(edge which in the path)

我检查了你的解决方案,我认为这是错误的(如果我误解了你的解决方案,请发表评论):

减去具有最高成本的孩子的边缘成本。(“贪婪” - 我们>不想具有最高成本的孩子回溯 )。

那个孩子将是一棵树,一些边缘必须访问两次。 例如:

    A
   / \
  B   C
 / \
D   E

您无法访问该子树所有边缘一次访问所有节点。

1-除最后一个叶节点外,将访问所有节点路径两次。

2-我们需要找出哪个叶子节点附加了最高成本才能访问根节点。

3-一旦我们发现这一点,我们将需要进行遍历,使得该叶节点是最后访问的节点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM