最小生成树Prim实现(.)

最小生成树

1 最小生成树的概念
生成树: 极小连通子图(边数最少,且删除任意一条边不再连通)
最下生成树:生成树的权值之和是最小的

2 Prim算法
2.1 原理
算法思想:任意一个顶点开始放入集合U,
每次选测一个与U中顶点最近的一个顶点,比你高将两个顶点之间的边极爱入到树中
重复,直到所有顶点都加入到生成树顶点集合U中为止
2.2 算法实现:

//记录U中点到个点最近边的信息(边的信息包括顶点和边的权值)
struct {
	VertexType adjvex;
	VRTtype lowcost;
}closedge[MVNUM];
void MiniSpanTree_P(MGraph G, VertexType u)
{
	//u在图中的位置, u是结点信息
	k = LocateVex(G, u);
	for (j = 0; j < G.vexnum; j++)
		if (j != k)
		{		
			closedge[j].adjvex = u;
			closedge[j].lowcost = G.arcs[k][j];
		}
	//用lowcost = 0 来表示 结点已经加入到生成树节点集合U中
	closedge[k].lowcost = 0;
	for (int i = 1; i <= G.vexnum - 1; i++)
	{
		//求最小的边 对应的 未加入集合的结点
		k = mininum(closedge);
		print(closedge[k].adjvex, G.vexs[k]);
		closedge[k].lowcost = 0;
		for (int j = 0; j < G.vexnum; j++)
		{
			if (G.arcs[k][j].adj <closedge[j].lowcost)
			{
				closedge[j].adjvex = G.vexs[k];
				closedge[j].lowcost = G.arcs[k][j].adj;
			}
		}
	}
}

3 Kruskal算法
算法思想: 每次选择一条最短边,只要不构成回路,即添加到最小生成树中
直到 n-1 条边选择完毕
4 总结与推广

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值