一、算法概述
最小生成树(Minimum Spanning Tree,MST):或者称为最小代价树Minimum-cost Spanning Tree:对无向连通图的生成树,各边的权值总和称为生成树的权,权最小的生成树称为最小生成树。
最小生成树问题其实就是求一棵怎样的树可以遍历每个节点,且总权值最小。
本文介绍用Kruskal算法解决最小生成树问题。
二、算法步骤
1、将连通图看做无边的散点,每个散点即为自己的父节点。
2、将每条边按照从小到大的顺序排列,每次从中取最小的边加入散点图。
3、加入时需要满足两个点连接后不能出现连通图。
要想确保不出现连通图,则两个点在连接前应属于不同的集合(树)。所以需要判定它们是否在一个集合中。
方法是使用并查集,关于并查集的内容请参照:https://blog.csdn.net/hacker_wind/article/details/79687134。
4、重复步骤直至散点图变为连通图。所以定义一个计数器,当计数器的数值等于节点个数时,程序退出。