c语言版本的最小生成树(Prim算法)概述

1、Prim算法概述:图论中的一种算法,可在加权连通图里搜索最小生成树。意即由此算法搜索到的边子集所构成的树中,不但包括了连通图里的所有顶点(英语:Vertex (graph theory)),且其所有边的权值之和亦为最小。

 2、最小生成树:一个有 n 个结点的连通图的生成树是原图的极小连通子图,且包含原图中的所有 n 个结点,并且有保持图连通的最少的边。最小生成树可以用kruskal(克鲁斯卡尔)算法或prim(普里姆)算法求出。

3、重点部分代码段实现 

//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(int i = 1;i<G.numVertexes;i++){

		lowcost[i] = G.arc[0][i]; //将领接矩阵的第0行所有权值先加入数组
		adjvex[i] = 0;            //将全部初始化为v0的下标
	}

	//真正构造最小生成树的过程
	for(int i = 1;i<G.numVertexes;i++){

		min = INFINITY;		//初始化最小权值为65535等不可能的数值
		j = 1;
		k = 0;


		//遍历全部顶点
		
		while(j < G.numVertexes){

			//找出lowcost数组已经存储的最小权值
			if(lowcost[j]!=0 && lowcost[j] < min){
				min = lowcost[j];
				k = j; //将发现的最小权值的下标存入k,以待使用
			} 
			j++;
		}
	}
}

 

全部评论

相关推荐

Southyeung:我说一下我的看法(有冒犯实属抱歉):(1)简历不太美观,给我一种看都不想看的感觉,感觉字体还是排版问题;(2)numpy就一个基础包,机器学习算法是什么鬼?我感觉你把svm那些写上去都要好一点。(2)课程不要写,没人看,换成获奖经历;(3)项目太少了,至少2-3个,是在不行把网上学习的也写上去。
点赞 评论 收藏
分享
05-20 21:57
已编辑
门头沟学院 Java
喜欢吃卤蛋的悲伤蛙在提需求:建信融通没消息吧,我2说有实习挂简历不理了
点赞 评论 收藏
分享
就只能3个月,但是要求长期全职实习
Swaying:你确实是能长期实习啊,但是你那时候有事也没啥办法嘛
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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