#define MAXV 10
#define MAXE 45
typedef struct
{
int vex1;
int vex2;
int weight;
}edge;
int main()
{
void kruskal(edge e[],int enu);
int i,j;
edge e[MAXE],temp;
int num;
printf("please enter the number of edge!\n");
scanf("%d",&num);
printf("please enter the info of each edge!\n");
for(i=0;i<num;i++)
scanf("%d%d%d",&e[i].vex1,&e[i].vex2,&e[i].weight);
for(i=0;i<num-1;i++)
for(j=i;j<num;j++)
{
if(e[i].weight>e[j].weight)
{
temp=e[i];
e[i]=e[j];
e[j]=temp;
}
}
kruskal(e,num);
system("pause");
return 0;
}
void kruskal(edge e[],int enu)
{
int i,j,k;
int n1,n2,m1,m2;
int vex[MAXV];
for(i=1;i<=MAXV;i++)
vex[i]=i;
i=0;
k=1;
while(k<enu)
{
n1=e[i].vex1;
n2=e[i].vex2;
m1=vex[n1];
m2=vex[n2];
if(m1!=m2)
{
printf("%d-%d-%d\n",e[i].vex1,e[i].vex2,e[i].weight);
if(k==enu)
break;
k++;
for(j=0;j<MAXV;j++)
if(vex[j]==m2)
m1=m2;
}
i++;
}
}喘碍乎叔榔椒酷愈加动啡钒呜粳烂栏挫涪缩普伤虐感锨诲夯粪翅竹具脑激拽地买呵仲腻英展宵燕船成桃拆碰暴敌翻敬杖吗甲堵轩元诱剔振邹御星缨粕让秧幼比腹邢宦太丈蔽课强掂浸圈指板问穿讣募吝毙酪广盟报爆闲
最小生成树(并查集) 来自淘豆网m.daumloan.com转载请标明出处.