求最小生成树-Prim(普里姆算法)

普里姆算法时间复杂度为O(V^2),适用于稠密图

#include <iostream>
using namespace std;
#define Maxsize 100
typedef char VertexType;
typedef int EdgeType;
typedef struct{
	VertexType Vex[Maxsize];
	EdgeType edge[Maxsize][Maxsize];
	int vexnum,arcnum;
}MGraph;

//Prim-普里姆算法
void Prim(MGraph G,int v0,int &sum){
	int lowcost[Maxsize],vset[Maxsize],v;
	int i,j,k,min;
	v=v0;
	for(i=0;i<G.vexnum;i++){
		lowcost[i]=G.edge[v0][i];	//初始化最短边 
		vset[i]=0;	//初始化树集合 
	} 
	vset[v0]=1;	//将v0并入树中 
	sum=0;	//树权值初始化 
	for(i=1;i<G.vexnum;i++){
		min=INF;	//INF是已经定义的比图中所有权值都大的常量
		for(j=0;j<G.vexnum;j++)
			if(vset[j]==0&&lowcost[j]<min){
				//选出当前生成树到其余顶点
				min=lowcost[j];
				k=j;	//记录树到其余顶点最短边对应点 
			} 
		vset[k]=1;	//加入树集合
		v=k;
		sum+=min;
		for(j=0;j<G.vexnum;j++)
			if(vset[j]==0&&G.edge[v][j]<lowcost[j])
				lowcost[j]=G.edge[v][j];	//更新最短边 
	}
}

 

全部评论

相关推荐

野猪不是猪🐗:现在的环境就是这样,供远大于求。 以前卡学历,现在最高学历不够卡了,还要卡第一学历。 还是不够筛,于是还要求得有实习、不能有gap等等... 可能这个岗位总共就一个hc,筛到最后还是有十几个人满足这些要求。他们都非常优秀,各方面都很棒。 那没办法了,看那个顺眼选哪个呗。 很残酷,也很现实
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务