簡體   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