C语言实现最小生成树构造算法-创新互联

最小生成树

太白ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为成都创新互联公司的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:13518219792(备注:SSL证书合作)期待与您的合作!

最小生成树(minimum spanning tree)是由n个顶点,n-1条边,将一个连通图连接起来,且使权值最小的结构。
最小生成树可以用Prim(普里姆)算法或kruskal(克鲁斯卡尔)算法求出。

我们将以下面的带权连通图为例讲解这两种算法的实现:

C语言实现最小生成树构造算法

注:由于测试输入数据较多,程序可以采用文件输入

C语言实现最小生成树构造算法

Prim(普里姆)算法

时间复杂度:O(N^2)(N为顶点数)
prim算法又称“加点法”,用于边数较多的带权无向连通图
方法:每次找与之连线权值最小的顶点,将该点加入最小生成树集合中
注意:相同权值任选其中一个即可,但是不允许出现闭合回路的情况。

C语言实现最小生成树构造算法C语言实现最小生成树构造算法C语言实现最小生成树构造算法C语言实现最小生成树构造算法C语言实现最小生成树构造算法C语言实现最小生成树构造算法C语言实现最小生成树构造算法

代码部分通过以下步骤可以得到最小生成树:

1.初始化:

lowcost[i]:表示以i为终点的边的最小权值,当lowcost[i]=0表示i点加入了MST。
mst[i]:表示对应lowcost[i]的起点,当mst[i]=0表示起点i加入MST。
由于我们规定最开始的顶点是1,所以lowcost[1]=0,MST[1]=0。即只需要对2~n进行初始化即可。

#define MAX 100 
#define MAXCOST 0x7fffffff 

int graph[MAX][MAX]; 

void prim(int graph[][MAX], int n) 
{ 
 int lowcost[MAX]; 
 int mst[MAX]; 
 int i, j, min, minid, sum = 0; 
 for (i = 2; i <= n; i++) 
 { 
 lowcost[i] = graph[1][i];//lowcost存放顶点1可达点的路径长度 
 mst[i] = 1;//初始化以1位起始点 
 } 
 mst[1] = 0;

另外有需要云服务器可以了解下创新互联建站www.cdcxhl.com,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


文章标题:C语言实现最小生成树构造算法-创新互联
文章转载:http://azwzsj.com/article/dojjjs.html