我试图通过包含我所有图形点的文件,将Prim算法与boost库的 prim_minimum_spanning_tree 函数一起使用。我使用Boost库的 kruskal_minimum_spanning_tree 函数成功创建了想要的图形。

但是使用 prim_minimum_spanning_tree 我只能获得每个点的直接父级,因此我的图形不完整。

我使用了boost文档中给出的示例:

对于prim:http://www.boost.org/doc/libs/1_47_0/libs/graph/example/prim-example.cpp

和kruskal一http://www.boost.org/doc/libs/1_47_0/libs/graph/example/kruskal-example.cpp

一个具体的例子:我有这个要点文件:

10
0 0.655171
0.304819 0.674978
0.106754 0.516587
0.489669 0.602466
0.369945 0.256661
0.374187 0.825587
0.172704 0.2978
0.643544 0.789666
0.987823 0.800592
0.464248 0.538987

使用krukal函数,我得到:
3 <--> 9
1 <--> 5
0 <--> 2
1 <--> 3
6 <--> 4
6 <--> 2
3 <--> 7
2 <--> 1
8 <--> 7

使用prim函数,我得到:
1 <--> 5
2 <--> 0
3 <--> 9
4 <--> 6
5 <--> 1
6 <--> 4
7 <--> 3
8 <--> 7
9 <--> 3

我有这些图的绘图,但是我无法发布图像,也无法发布多个linkl。
但是如您所见,我错过了3个链接。

如何使用prim函数获得与使用kruskal相同的结果?

谢谢,

PS:我以示例代码为基础,并尝试了许多修改,但均未成功,无法在Web或文档中找到任何有用的信息。

最佳答案

我已经找到了自己的问题的答案,可能对其他人有用。

我链接了两次点,这对kruskal算法有效,但对素数算法无效,例如在我的边缘:

0 <--> 1
1 <--> 0

对于prim的算法,我应该只将这些点链接一次。

10-04 12:29