求最小生成树-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];	//更新最短边 
	}
}

 

全部评论

相关推荐

鼠鼠能上岸吗:进行中是秋招大项目进行中,你还可以选别的岗位;已结束是这个岗位流程结束了;筛选中就是在简历筛选环节没hr捞
投递美团等公司10个岗位
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务