1 #include <stdio.h>
2 #include <stdlib.h>
3 #define n 6
4 int juzhen[6][6]={{9,6,1,5,9,9},{6,9,5,9,3,9},{1,5,9,5,6,4},{5,9,5,9,9,2},{9,3,6,9,9,6},{9,9,4,2,6,9}};//存储权值
5 int lowcost[6];//最小的权值
6 int set[6];//记录下一个节点位置
7 int s[6]={0};
8 void prim()
9 {
10 int i,j,k;
11 int min;
12 for(i=1;i<n;i++)
13 {
14 lowcost[i]=juzhen[0][i];
15 set[i]=0;
16 s[i]=0;
17 }
18
19 for(i=0;i<n-1;i++)//循环一次 加入一条边 保证循环次数就行
20 {
21 j=0;//这个无所谓 是谁都可以 现在放入的 边数
22 min=999;
23 for(k=1;k<n;k++)
24 {
25 if(s[k]==0&&lowcost[k]<min)
26 {
27 min=lowcost[k];
28 j=k;
29 }
30 }
31 printf("%d %d\n",j,set[j]);
32 s[j]=1;
33
34 for(k=1;k<n;k++)
35 {
36 if(juzhen[j][k]<lowcost[k]&&s[k]==0)
37 {
38
39 lowcost[k]=juzhen[j][k];
40 set[k]=j;
41 }
42 }
43 }
44 }
45 int main()
46 {
47 int i,j;
48 printf("下面开始最小生成树的算法,输出各边权值\n");
49 for(i=0;i<n;i++)
50 {
51 for(j=0;j<n;j++)
52 {
53 printf("%d ",juzhen[i][j]);
54 }
55 printf("\n");
56 }
57 printf("调用生成树函数\n");
58 prim() ;
59 return 0;
60
61 }