【问题标题】:Find all spanning trees from a given root查找给定根的所有生成树
【发布时间】:2020-06-15 16:07:23
【问题描述】:

如何使用呼吸优先搜索从起始顶点查找所有可能的生成树。 不止一个。

【问题讨论】:

  • 显然你不能使用广度优先搜索来做到这一点。想象一个完全连接的图,一个可能的跨越是一个长字符串,例如通过深度深度优先搜索找到,但 BFS 并非旨在找到它。

标签: c++ graph breadth-first-search spanning-tree


【解决方案1】:

如果您正在寻找所有可能的生成树,那么您实际上不需要执行 BFS。您可以将每条边的权重设置为 1,然后运行一个算法来查找图中的所有最小生成树。

之所以有效,是因为所有生成树都有V-1 边(其中V 表示顶点数)。由于我们将所有边的权重设置为 1,因此每棵生成树都是最小生成树!

编辑:由于您只寻找从某个根开始的生成树,因此您可以使用深度优先搜索来解决此问题。

以起始节点为根目标执行深度优先搜索过程。您可以扩充该过程以仅连接不同组件中的节点。

【讨论】:

  • 你是对的,但就我而言,我想从开始遍历的顶点找到可能的生成树。
  • 生成树连接图中的每个节点,因此任何生成树都会自动包含起始顶点。
  • 我认为它必须是生成树的根,据我所知,那个起始顶点。所以这将是所有以该顶点为根的生成树。(我希望更容易理解)
  • 在这种情况下,你应该做一个 DFS。我会在我的回答中解释更多。
  • 感谢您的回答,但我需要编写一个程序,该程序从所选顶点的宽度(BFS)遍历,然后找到具有给定根的可能生成树。无论如何,我都会将您的答案标记为已接受。
猜你喜欢
  • 1970-01-01
  • 2017-03-23
  • 1970-01-01
  • 2016-02-09
  • 2019-08-25
  • 2016-12-24
  • 1970-01-01
  • 1970-01-01
  • 2020-11-28
相关资源
最近更新 更多