// Prim 算法生成最小生成树
void MiniSpanTree_Prim(MGraph G)
{
int min, i, j, k;
int adjvex[MAXVEX]; //保存相关顶点下标
int lowcost[MAXVEX]; //保存相关顶点间边的权值
lowcost[0] = 0; //v0作为最小生成树的根开始遍历,权值为0
adjvex[0] = 0; //v0第一个加入
//初始化操作
for (i=1; i<G.numVertexs; i++)
{
lowcost[i] = G.arc[0][i]; //将邻接矩阵第0行所有权值先加入数组
adjvex[i] = 0; //初始化全部先为v0的下标
}
//真正构造最小生成树的过程
for(i=1; i<G.numVertexes; i++)
{
min = INFINITY; //初始化最小权值为65535等不可能的数值
j = 1;
k = 0;
// 遍历全部顶点
while(j < G.numVertexes; i++)
{
if (lowcost[j] != 0 && lowcost[j] < min)
{
min = lowcost[j];
k = j;
}
j++;
}
//打印当前顶点边中权值最小的边
printf("%d, %d", adjvex[k], k);
lowcost[k] = 0; //将当前顶点的权值设置为0, 表示该顶点已经完成任务,进行下一个顶点的遍历、
// 邻接矩阵k行逐个遍历全部顶点
for(j=1; j<G.numVertexes; j++)
{
if (lowcost[j] != 0 && G.arc[k][j] < lowcost[j])
{
lowcost[j] = G.arc[k][j];
adjvex[j] = k;
}
}
}
}
最小生成树--普里姆算法
最新推荐文章于 2023-11-29 20:29:28 发布