Kruskal算法
B站视频
(前置知识:并查集)
将图(无向有权图)中所有的边放入一个列表中(数组、链表),并按照边的权值从小到大排列( s o r t sort sort),然后再从小到大(权值)遍历所有的边,此时相当于回填,。

如图为排序后的边的列表。

然后,我们遍历边的时候,每次判断是否形成环,形成环的话边将被抛弃。我们图解接下来的步骤。





有环,删边






最后两边有环,此处省略。
最后我们就得到了最小生成树。
图解算法只能停留在纸上,每一步都要有代码实现支撑。
首先,我们如何存图?
可以用邻接矩阵、邻接表、链式前向星。
接下来我们如何排序?
sort就完了(废话)
我们如何连边?如何判断有没有环?
使用并查集,把点存在集合里,如果遍历到后面的边,发现两个点都在集合里面了,说明如果加上这条边就有环了,在并查集里面就是父节点相同,说明在一个集合。
模板题,洛谷P3366
题目描述
如题,给出一个无向图,求出最小生成树,如果该图不连通,则输出 orz。
输入格式
第一行包含两个整数 N,M,表示该图共有 N个结点和 MM条无向边。
接下来 MM 行每行包含三个整数 X i , Y i , Z i X_i,Y_i,Z_i X
8469




被折叠的 条评论
为什么被折叠?



