C++ 使用BGL创建生成树

C++ 使用BGL创建生成树,c++,algorithm,boost,graph,boost-graph,C++,Algorithm,Boost,Graph,Boost Graph,我有一个BGL图,想用BGL创建一个生成树 从指定的顶点开始,我想将最短边添加到与该顶点连接的图形中。从那以后,我想总是选择最短的边,它与迄今为止存在的图相连接 因此,我想添加一个约束,即每个新边都必须已经连接到图上,同时保持生成树标准,即没有循环 用手做这件事并不难;但由于我想了解一些关于BGL的知识,我想知道哪种算法最适合我的问题。这是Prim算法: 你会得到一个最小生成树 不确定你是否会对BGL有很大的帮助,但无论如何,这个想法的难点是找到“最小边缘”:看看维基百科页面上的伪代码,看看如何

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

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

因此,我想添加一个约束,即每个新边都必须已经连接到图上,同时保持生成树标准,即没有循环

用手做这件事并不难;但由于我想了解一些关于BGL的知识,我想知道哪种算法最适合我的问题。

这是Prim算法:

你会得到一个最小生成树

不确定你是否会对BGL有很大的帮助,但无论如何,这个想法的难点是找到“最小边缘”:看看维基百科页面上的伪代码,看看如何使用二进制堆来完成。为了获得更好的复杂性,您需要Fibonacci堆。

这是Prim算法:

你会得到一个最小生成树


不确定你是否会对BGL有很大的帮助,但无论如何,这个想法的难点是找到“最小边缘”:看看维基百科页面上的伪代码,看看如何使用二进制堆来完成。为了获得更好的复杂性,您需要斐波那契堆。

这听起来像是从指定的顶点开始,通过添加最轻的边,将树中的顶点连接到不在树中的顶点,来生长一棵树。如果是这样的话,您正在实现Prim的算法,它确实为您提供了一个MST。Cormen、Leiserson、Rivest&Stein在MST的“算法”一章中很好地描述了这一点


(我之所以说“听起来像”,是因为“与迄今为止存在的图形相连接的最短边”这句话有点含糊。)

听起来像是从指定的顶点开始,通过添加将树中的顶点连接到不在树中的顶点的最轻边来生长一棵树。如果是这样的话,您正在实现Prim的算法,它确实为您提供了一个MST。Cormen、Leiserson、Rivest&Stein在MST的“算法”一章中很好地描述了这一点

(我之所以说“听起来像”,是因为“最短边连接到目前为止存在的图形”的说法有点模糊。)