它是如何工作的?
Coddy 克鲁斯卡尔算法:图算法 课程的第 3 课,共 9 课。
并查集维护一个 parent 数组。每个顶点一开始都是自己的根节点。两个操作就能完成所有工作:
- find(x):沿着
parent链接一直查找,直到到达根节点(一个以自身为父节点的顶点)。两个顶点共享同一个根节点时,它们就是连通的。 - union(a, b):将一个根节点指向另一个根节点,合并这两个集合。
Kruskal 算法:
- 按边的权重从小到大处理边。
- 对于每条边,使用
find查找其端点的根节点。如果根节点不同,这条边就连接了两个不同的部分:使用union合并它们,并将这条边的权重加到总和中。 - 如果根节点相同,这条边会形成一个环,因此跳过它。
处理完所有边后,选出的边构成 MST(对于连通图,恰好有 n - 1 条边)。
亲手试试
这节课没有代码挑战。
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
克鲁斯卡尔算法:图算法中的所有课
自己练习: C 在线编译器