最小生成树
在含有n个顶点的连通图中选择n-1条边,构成一棵极小连通子图,并使该连通子图中n-1条边上权值之和达到最小,则称其为连通网的最小生成树。
例如,对于如上图G4所示的连通网可以有多棵权值总和不相同的生成树。
克鲁斯卡尔算法介绍
克鲁斯卡尔(Kruskal)算法,是用来求加权连通图的最小生成树的算法。
基本思想:按照权值从小到大的顺序选择n-1条边,并保证这n-1条边不构成回路。
具体做法:首先构造一个只含n个顶点的森林,然后依权值从小到大从连通网中选择边加入到森林中,并使森林中不产生回路,直至森林变成一棵树为止。
克鲁斯卡尔算法图解
以上图G4为例,来对克鲁斯卡尔进行演示(假设,用数组R保存最小生成树结果)。
第1步:将边加入R中。
边的权值最小,因此将它加入到最小生成树结果R中。
第2步:将边加入R中。
上一步操作之后,边的权值最小,因此将它加入到最小生成树结果R中。
第3步:将边加入R中。
上一步操作之后,边的权值最小,因此将它加入到最小生成树结果R中。
第4步:将边加入R中。
上一步操作之后,边的权值最小,但会和已有的边构成回路;因此,跳过边。同理,跳过边。将边加入到最小生成树结果R中。
第5步:将边加入R中。
上一步操作之后,边的权值最小,因此将它加入到最小生成树结果R中。
第6步:将边加入R中。
上一步操作之后,边的权值最小,但会和已有的边构成回路;因此,跳过边。同理,跳过边。将边加入到最小生成树结果R中。
此时,最小生成