【问题标题】:Minimum path to connect k nodes in a graph with n nodes将图中的 k 个节点与 n 个节点连接的最小路径
【发布时间】:2015-04-15 22:28:45
【问题描述】:

给定一个包含 n 个节点和 n-1 条边的图,找出连接 k 个节点所需的最少边数。你有 m 个数字 k

对于 n=5 和 k=4 的图,可能的路径可能是 1-2-5-2-3。

我的方法是一种贪心方法,我从排名最高的节点开始并尝试从那里添加边,但我在尝试制定算法时没有取得太大成功。

【问题讨论】:

  • SO 不是免费的编码服务。展示您的尝试,我们将帮助您实现它。另外,请用您使用的语言标记您的问题。

标签: c++ graph path nodes minimum


【解决方案1】:

尝试在你的树中找到最长的路径,你将在该路径上的每条边都取一次,而不是选择具有边的随机节点,该节点将该节点连接到已经选择的元素。

因此,如果该路径有 k 个或更多节点,则在树中找到最长的路径,它是终点,您选择该路径上的元素,每条边都将被采用一次
否则选择一个随机的、未采用的节点,只要您的集合中没有 k 个节点,它就可以通过任何边直接连接到已采用的节点之一。

【讨论】:

  • 所有节点由n-1条边连接。
  • 整个图中的n-1条边?对不起,也许我的英语很弱但它似乎是一个连接组件。如果您创建任何 dfs-tree,您可以在那里选择最长的现有根,您将使用它一次,而不是如果您需要选择附加分支/根,您将使用它们两次。您在数组中创建 dfs-tree,其中元素指向他的父级,根指向 -1,但为此您还需要记住每个分支的高度。当您选择树中最长的根时,您可以添加该根优先级队列中的所有节点,此时优先级将是最长的分支。仍然不知道它是否 100% 正确。
  • 那图不是树吗?
  • 是树,但不是二叉树;你可以有一个与其他节点有边的节点。
  • 尝试在你的树中找到最长的路线,你将在该路线上的每条边都取一次,而不是选择具有边的随机节点,该节点将该节点连接到已经选择的元素。因此,如果该路线具有 k 或更多节点,则在树中找到最长的路线,它是终点,您选择该路线上的元素,一旦选择每条边将被采用 Else 选择一个随机的,未采用的节点,该节点由任何边直接连接到只要您的集合中没有 k 个节点,就可以选择一个已经使用的节点。
猜你喜欢
  • 1970-01-01
  • 2017-09-14
  • 2020-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-18
  • 1970-01-01
  • 2012-10-02
相关资源
最近更新 更多