#include <iostream>
#define MAXVEX 6 //结点数(初始默认6顶点,更改的话直接在这里修改即可)
#define MAXEDGE 10 //边数(初始默认10条边,更改的话直接在这里修改即可)
#define INFINITY 65535 //表示无穷大
using namespace std;
//普利姆最小生成树原理:
//步骤1:确定s和c两个集合,s放生成树结点,c放其余结点
//步骤2:先选一个结点1放入s,此时结点1在s中,其余结点在c中
//步骤3:在与s中的结点1相邻的结点中选出权值最小的那个结点2放入s中,此时s中有结点1和2
//步骤4:在与s中的结点1(结点2)相邻的结点中选出权值最小的那个结点3放入s中,此时s中有结点1和2和3
//步骤5:以此类推........
//下面代码是无向图的邻接矩阵的普利姆算法
//注意点:下标0的位置都不用,所以要多开辟一个空间
//若改为有向图的邻接矩阵普利姆算法,则:
//1.删除下面的一句代码g.matrix[n][m]=1;
typedef struct
{
int vexNum; //顶点数
int edgeNum; //边数
int matrix[MAXVEX+1][MAXVEX+1]; //二维数组表示矩阵
char vexinfo[MAXVEX+1]; //存放结点数组的值(如A,B,C,D)
}AdjMatr; //邻接矩阵
/*********************初始化邻接矩阵************************/
void initAdjMatr(AdjMatr &g )
{
g.vexNum = MAXVEX; //顶点数
g.edgeNum = MAXEDGE; //边数
//初始化矩阵信息,初始为,一个不可能的数字表示这两个顶点之间不存在边
for(int i=1;i<=MAXVEX;i++)
C++数据结构-普利姆算法最小生成树
最新推荐文章于 2024-07-12 16:04:04 发布