01.#include "graph.h"
02.
03.void Prim(MGraph g,int v)
04.{
05. int lowcost[MAXV]; //顶点i是否在U中
06. int min;
07. int closest[MAXV],i,j,k;
08. for (i=0; i<g.n; i++) //给lowcost[]和closest[]置初值
09. {
10. lowcost[i]=g.edges[v][i];
11. closest[i]=v;
12. }
13. for (i=1; i<g.n; i++) //找出n-1个顶点
14. {
15. min=INF;
16. for (j=0; j<g.n; j++) //在(V-U)中找出离U最近的顶点k
17. if (lowcost[j]!=0 && lowcost[j]<min)
18. {
19. min=lowcost[j];
20. k=j; //k记录最近顶点的编号
21. }
22. printf(" 边(%d,%d)权为:%d\n",closest[k],k,min);
23. lowcost[k]=0; //标记k已经加入U
24. for (j=0; j<g.n; j++) //修改数组lowcost和closest
25. if (g.edges[k][j]!=0 && g.edges[k][j]<lowcost[j])
26. {
27. lowcost[j]=g.edges[k][j];
28. closest[j]=k;
29. }
30. }
31.}
32.
33.int main()
34.{
35. MGraph g;
36. int A[6][6]=
37. {
38. {0,10,INF,INF,19,21},
39. {10,0,5,6,INF,11},
40. {INF,5,0,6,INF,INF},
41. {INF,6,6,0,18,14},
42. {19,INF,INF,18,0,33},
43. {21,11,INF,14,33,0}
44. };
45. ArrayToMat(A[0], 6, g);
46. printf("最小生成树构成:\n");
47. Prim(g,0);
48. return 0;
49.}
<img src="https://img-blog.csdn.net/20151204082817857?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
<img alt="" src="https://img-blog.csdn.net/20151123163442451" />