最小生成树之克鲁斯卡尔(Kruskal)算法
克鲁斯卡尔(Kruskal)算法(加边法):
基本思想:按照权值从大到小的顺序选择 n - 1 条边,并保证这 n - 1 条边不构成回路
克鲁斯卡尔算法需重点解决两个问题:
1、对图的所有边按照权值的大小进行排序
解决:采用排序算法排序即可
2、将边添加到最小生成树中时,怎样判断是否形成了回路
解决:加入的边的两个顶点不能都指向同一个终点,否则会形成回路(终点定义:将所有顶点按照从小到大的顺序排列好之后,某个顶点的终点就是与它连通的最大顶点)
比如:在第三步后面不能加入<C, E>这条边,因为C、E此时都指向F这个终点;也不能加入<C, F>这条边,因为C、F此时也都指向F这个终点;而可以加入<B, F>这条边,是因为此时F的终点是F,而B此时还没有终点,因此可以加入这条边
第一步:选取边<E, F>;
第二步:选取边<C, D>;
第三步:选取边<E, D>;
第四步:选取边<B, F>;
第五步:选取边<G, E>;
第六步:选取边<A, B>;

相关文章: