#include "stdio.h"
#include "stdlib.h"
#define MAX 110
int a[MAX][MAX],p[MAX];
int main(void)
{
int i,j,k,n,t,min,sum,new_point,x,y,d;
printf("请输入顶点的个数:");
scanf("%d",&n);
t=n*(n-1)/2;
for(i=0;i<MAX;i++){
p[i] = 0;
}
//memset(p,0,sizeof(p)); //将p数组初始化为0
printf("请输入每条边的起始端点、权值:/n");
for(i=0;i<t;i++)
{
scanf("%ld%ld%ld",&x,&y,&d); //输入每条边的权值
a[x][y]=a[y][x]=d;
}
p[1]=1;
sum=0;
for(k=0;k<n-1;k++)
{
min=-1;
for(i=1;i<=n;i++)
{
if(p[i]==1)
{
for(j=1;j<=n;j++)
{
if(p[j]==0 && (min==-1 || min>a[i][j]))
{
min=a[i][j]; //从一个顶点在U中,而另一个顶点不在U中的各条边中选择权值最小的边
new_point=j;
}
}
}
}
p[new_point]=1;
sum+=min;
}
printf("最小生成树的权值为:%d/n",sum);
system("pause");
return 0;
}
#include "stdlib.h"
#define MAX 110
int a[MAX][MAX],p[MAX];
int main(void)
{
int i,j,k,n,t,min,sum,new_point,x,y,d;
printf("请输入顶点的个数:");
scanf("%d",&n);
t=n*(n-1)/2;
for(i=0;i<MAX;i++){
p[i] = 0;
}
//memset(p,0,sizeof(p)); //将p数组初始化为0
printf("请输入每条边的起始端点、权值:/n");
for(i=0;i<t;i++)
{
scanf("%ld%ld%ld",&x,&y,&d); //输入每条边的权值
a[x][y]=a[y][x]=d;
}
p[1]=1;
sum=0;
for(k=0;k<n-1;k++)
{
min=-1;
for(i=1;i<=n;i++)
{
if(p[i]==1)
{
for(j=1;j<=n;j++)
{
if(p[j]==0 && (min==-1 || min>a[i][j]))
{
min=a[i][j]; //从一个顶点在U中,而另一个顶点不在U中的各条边中选择权值最小的边
new_point=j;
}
}
}
}
p[new_point]=1;
sum+=min;
}
printf("最小生成树的权值为:%d/n",sum);
system("pause");
return 0;
}