69,335
社区成员
发帖
与我相关
我的任务
分享
00.#include "stdio.h"
01.#include "stdlib.h"
02.#define MAX 110
03.int a[MAX][MAX],p[MAX];
04.
05.int main(void)
06.{
07. int i,j,k,n,t,min,sum,new_point,x,y,d;
08. printf("请输入顶点的个数:");
09. scanf("%d",&n);
10. t=n*(n-1)/2;
11. memset(p,0,sizeof(p)); //将p数组初始化为0
12. printf("请输入每条边的起始端点、权值:\n");
13. for(i=0;i<t;i++)
14. {
15. scanf("%ld%ld%ld",&x,&y,&d); //输入每条边的权值
16. a[x][y]=a[y][x]=d;
17. }
18. p[1]=1;
19. sum=0;
20. for(k=0;k<n-1;k++)
21. {
22. min=-1;
23. for(i=1;i<=n;i++)
24. {
25. if(p[i]==1)
26. {
27. for(j=1;j<=n;j++)
28. {
29. if(p[j]==0 && (min==-1 || min>a[i][j]))
30. {
31. min=a[i][j]; //从一个顶点在U中,而另一个顶点不在U中的各条边中选择权值最小的边
32. new_point=j;
33. }
34. }
35. }
36. }
37. p[new_point]=1;
38. sum+=min;
39.
40. }
41. printf("最小生成树的权值为:%d\n",sum);
42. system("pause");
43. return 0;
44.}