【问题标题】:Creating a spanning tree using BGL使用 BGL 创建生成树
【发布时间】:2010-10-29 14:35:04
【问题描述】:

我有一个 BGL 图,想使用 BGL 创建一个生成树。

从指定的顶点开始,我想将最短的边添加到与该顶点连接的图形中。从那以后,我想总是选择与目前存在的图形连接的最短边。

所以,我想添加一个约束,即每条新边都必须已经连接到图形,同时保持没有循环的生成树标准。

手工操作并不难;但由于我想学习一些关于 BGL 的知识,所以我想知道哪种算法最适合我的问题。

【问题讨论】:

    标签: c++ algorithm boost graph boost-graph


    【解决方案1】:

    听起来您正在种植一棵树,从您指定的顶点开始,通过添加将树中的顶点连接到不在树中的顶点的最轻边。如果是这种情况,您正在实施 Prim 的算法,该算法确实为您提供了 MST。 Cormen、Leiserson、Rivest 和 Stein 在 MST 的“算法”一章中有很好的描述。

    (我说“听起来像”是因为“与目前存在的图相连的最短边”这句话有点含糊。)

    【讨论】:

      【解决方案2】:

      这就是 Prim 算法:http://en.wikipedia.org/wiki/Prim%27s_algorithm

      你会得到一个最小生成树!

      不确定您是否会倾向于使用 BGL,但无论如何,这个想法的困难在于找到“最小边缘”:查看维基百科页面上的伪代码,看看如何使用二叉堆。为了获得更好的复杂性,您需要斐波那契堆。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-08-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-02-10
        • 1970-01-01
        相关资源
        最近更新 更多