//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条边,初值为1
j=0; //E中边的下标,初值为0
while(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].weig
数据结构之---C语言实现最小生成树之kruskal(克鲁斯卡尔)算法
最新推荐文章于 2025-07-11 12:55:27 发布