首先说一下什么是树:
1、只含一个根节点
2、任意两个节点之间只能有一条或者没有线相连
3、任意两个节点之间都可以通过别的节点间接相连
4、除了根节点没一个节点都只有唯一的一个父节点
5、也有可能是空树(不含任何节点)
最小生成树就是:
在所有数据满足是一棵树的情况下一条将所有节点都连接起来且长度最短的一条路(因为任意两个节点之间有权值
(相连的两点之间权值为一个具体的数,不相连的两个点之间权值为无穷大))
下面介绍通用的求最小生成树的两种算法:
我的博客园:点我打开
ps:这里用的两种算法都是用邻接矩阵实现适合点稠密型数据或者数据较小的情况:
(1)prime算法:
/*
* 数组tree[]用来记录最小生成树的节点
* 数组lowdis[]记录从起点到其余所有点的距离并不断更新
* 数组map[][]记录所有数据两点之间的距离
* point是所有节点的数目,begin是起点
* mindis是最小生成树的长度
*/
void prime()
{
int i,j,min,mindis=0,next;
memset(tree,0,sizeof(tree));
for(i=1;i<=point;i++)
{
lowdis