定义
与普利姆算法通过操作顶点集合来计算最小生成树相比较,克鲁斯卡尔算法是通过对图中的边集操作来实现的。
算法过程如下:
设置边集为E,图中的每一个连通子图G,G_set为连通子图的集合,即G_set{G1,G2...},在E中选择权值最小的边e,加入到G_set中,其中可能存在如下情形:
1、G_set中的某个元素Gi连通子图,在加入边e后形成闭环,则不作处理;
2、e这条边的两个顶点分属G_set的两个不同元素Gi,Gj (i!=j),则将Gi,Gj两个子图合并为一个子图;
3、e这条边的两个顶点都不属于G_set的任一个元素,则新建只包含e的连通子图new_G,并加入到G_set中;
重复选择E中的权值最小边,直到G_set中只存在一个元素G,且G中包含所有图顶点,此时G即为最小生成树。
示例
选择相同的示例进行操作
克鲁斯卡尔操作步骤如下:
{A,G} 选择:A-G
{A,G,B}