kruskal算法是一种比较方便求最小生成树的算法,由于较为简单,常用于稀疏图。而prim算法常用于稠密图。下面简单说一下kruskal算法求最小生成树的过程。

   kruskal算法中是要使用并查集,小伙伴们可以自行学习。下面开始kruskal算法,首先找出权值最小的边,如果两个顶点没有在同一个集合中,那么将两个集合合并为一个集合,如果两个点在一个集合中,就不合并,找第二小的,继续判断合并,直至包括所有的点在内,下面简单演示一下:

图片说明

   对于这张图,权值最小的边为1,有两条,我们任选一条即可,不如选D和F,而且D和F并不在一个集合内(并查集初始集合是自己本身),所以合并,此时变成了:

图片说明

   此时权值最小的边是A和B相连的权值为1的边,且A和B不属于一个集合,所以合并,此时变成了:

图片说明

   此时权值最小的边为2,我们不妨将D和B合并,且D和B并不属于同一集合,所以合并,此时变成了:

图片说明

   此时权值最小的边是C和F相连的权值为2的边,且F和C并不属于同一集合,合并,此时变成了:

图片说明

   此时权值最小的边为A和E相连的权值为3的边,且A和E并不属于同一集合,合并,此时:

图片说明

   此时所有的边都在其中,最小生成树就构建完成了,kruskal算法的思想就是:最小生成树中一定包括当前权值最小的边。至于具体的数学证明各位小伙伴请自行百度。