Kruskal算法步骤如下:
1. 新建图G,G中拥有原图中相同的节点,但没有边
2. 将原图中所有的边按权值从小到大排序
3. 从权值最小的边开始,如果这条边连接的两个节点于图G中不在同一个连通分量中,则添加这条边到图G中
4. 重复3,直至图G中所有的节点都在同一个连通分量中
Kruskal算法的实现类似于计算连通支的算法。它使用了分离集合数据结构以保持数个互相分离的元素集合。每一集合包含当前森林中某个树的结点,操作FIND-SET(u)返回包含u的集合的一个代表元素,因此我们可以通过FIND-SET(v)来确定两结点u和v是否属于同一棵树,通过操作UNION来完成树与树的联结。
伪代码如下:
我们使用并查集来实现Kruskal算法,C++代码如下: