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 ",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("下面开始最小生成树的算法,输出各边权值 "); 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(" "); 56 } 57 printf("调用生成树函数 "); 58 prim() ; 59 return 0; 60 61 }