数据结构——最小生成树之克鲁斯卡尔算法(Kruskal)

最小生成树算法 prime算法和克鲁斯卡尔算法
克鲁斯卡尔算法
思路 优先队列+并查集

Kuskal算法

【算法简介】:上一篇中的Prime算法是一种“加点式的算法”,而Kuskal算法是一种“加边式的算法”;Kuskal算法与Prime算法都是一种贪心算法,但Kruskal算法对图中存在相同权值的边时也有效。
【算法思想】:算法对权值从小到大排序,每次选取当前权值最小的边加入结点,直到所有的结点都已加入结点。算法中用到了并查集的思想(并查集),通过并查集来判断两个结点是否有共同的父节点,如果有,则表明两个结点已经联通。如果没有,就将两个结点联通,记录路径。

Kruskal算法也是采用贪心算法的思想,运行时间为O(nlogn)。

代码设计

1、利用优先级队列将权值小的边放到队列最前,优先出对,保证了每次选择的都是权值最小的边。

2、利用并查集的查找及结合把同处同一连通分量中的顶点连到同一父节点下。这样,每次判断是否构成回路,只要判断父节点是否相同的即可。

1.1 存图方式

使用结构体数组来存图;

//因为每条边需要保存数据   起始节点 ,到达节点 ,花费(路的长度

猜你喜欢

转载自blog.csdn.net/qq_50675813/article/details/120999432