最小生成树算法–prim算法
算法思路:
n个结点的最小生成树一共有n-1条边,我们可以选一个结点作为初始结点,然后添加n - 1条边并保证这个生成树的权重总和是最小的那么这个生成树就是最小生成树。我们把上面步骤分成两步,首先,把第一个节点添加到生成树中,其次,循环n - 1次,每次找出所有边的一个节点在生成树中而另一个结点不在生成树中的边中权重最小的边连接到生成树中,这样n - 1次后就形成了最小生成树。
代码实现:
#include<iostream>
using namespace std;
#define MaxVertexNum 10//定义最大数组
#define MAX 10000//最大值
typedef char VertexType;//结点名称的类型
typedef int EdgeType;//结点权重的类型
typedef struct{
//图的结构体
VertexType Vex[MaxVertexNum];//结点数组
EdgeType Edge[MaxVertexNum][MaxVertexNum];//邻接矩阵--权值的二维数组
int vexnum, arcnum;//节点数、边数
}Graph;//结构体的名称
void MST_Prim(Graph G){
//最小生成树--prim算法
int min_weight[G.vexnum];//辅助数组--保存生成树到每个结点的最小权重
int adjvex[G.vexnum];//辅助数组--保存每个结点是从哪个结点连接过来的
for(int i = 0