本文主要是介绍数据结构之---C语言实现最小生成树之kruskal(克鲁斯卡尔)算法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
//Kruskal(克鲁斯卡尔)算法
//杨鑫
#include <stdio.h>
#include <stdlib.h>
#define MAX 1000
#define MAXE MAX
#define MAXV MAX
typedef struct
{int beginvex1; //边的起始顶点int endvex2; //边的终止顶点int weight; //边的权值
}Edge;void kruskal(Edge E[],int n,int e)
{ int i,j,m1,m2,sn1,sn2,k;int vset[MAXV];for(i=1;i<=n;i++) //初始化辅助数组{vset[i]=i; } k=1; //表示当前构造最小生成树的第k条边,初值为1j=0; //E中边的下标,初值为0while(k < e) //判断是否加入了最小生成树中{m1=E[j].beginvex1;m2=E[j].endvex2; //取一条边的两个邻接点sn1=vset[m1];sn2=vset[m2]; //分别得到两个顶点所属的集合编号if(sn1 != sn2) //判断是否有回路{printf("(v%d,v%d): %d\n",m1,m2,E[j].weight);k++; //生成边数增lif(k>=6) break;for(i=1;i<=n;i++) //两个
这篇关于数据结构之---C语言实现最小生成树之kruskal(克鲁斯卡尔)算法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!