概念
生成树:一个连通图的生成树是一个极小的连通子图,它含有图中全部的n个顶点,但只有足以构成一棵树的n-1条边。
最小生成树:构造连通网的最小代价生成树
算法
算法思想:假设N=(V, {E})是连通网,TE是N上最小生成树中边集合。算法从U={a}, TE={}开始。重复下述操作:寻找从与a有关联的边中,权重最小的那条边,并且该边的终点b在顶点集合:(V-U)中,我们也把b加入到集合U中,并且输出边(a,b)的信息,这样我们的集合U就有:{a,b}。然后,我们寻找与a关联和b关联的边中,权重最小的那条边并且该边的终点在集合:(V-U)中,我们把c加入到集合U中,并且输出对应的那条边的信息,这样我们的集合U就有:{a,b,c}这三个元素了,一次类推,直到所有顶点都加入到了集合U。
如图,有连通树及邻接矩阵如下:
#include<iostream>
using namespace std;
typedef char VertexType;
typedef int EdgeType;
#define MAXVEX 9
#define INFINITY 65535
//邻接矩阵结构
typedef struct
{
VertexType vexs[MAXVEX];
EdgeType arc[MAXVEX][MAXVEX];
int numVertexes;
}MGraph;
//prim算法
void MiniSpanTree_Prim(MGraph G){
int min, i, j, k;
int adjvex[MAXVEX]; //保存相关顶点下标
int lowcost[MAXVEX]