标签:
prim就是一个让树长大的过程 弄一个集合 从一个点开始不断向外搜索 找到权值最小的点 放进集合中 从这个集合所连的边再向外找
1 #define USED 0 2 #define NOADJ -1 3 void Prim(MaxtrixGraph G) 4 { 5 int i,j,k,min,sum=0; 6 int weight[VERTEX_MAX]; 7 char tmpvertex[VERTEX_MAX]; //临时顶点信息 8 9 for(i=1;i<G.VertexNum;i++) //保存邻接矩阵里一行的信息 10 { 11 weight[i]=G.Edges[0][i]; 12 if(weight[i]==MAXVALUE) 13 tmpvertex[i]=NOADJ; 14 else 15 tmpvertex[i]=G.Vertex[0]; 16 } 17 tmpvertex[0]=USED; //把0号顶点标为已使用 18 weight[0]=MAXVALUE //把已使用顶点权值设为最大 19 for(i=1;i<G.VertexNum;i++) 20 { 21 min=weight[0]; 22 k=i; 23 for(j=1;j<G.VertexNum;j++) 24 { 25 if(weight[j]<min &&tmpvertex[j]!=0) 26 { 27 min=weight[j]; 28 k=j; 29 } 30 } 31 sum+=min; 32 printf("%c,%c",tmpvertex[k],G.Vertex[k]); 33 tmpvertex[k]=USED; 34 weight[k]=MAXVALUE; 35 for(j=0;j<G.VertexNum;j++) 36 { 37 if(G.Edges[k][j]<weight[j] && tmpvertex[j]!=0) 38 { 39 weight[j]=G.Edges[k][j]; 40 tmpvertex[j]=G.Vertex[k]; 41 } 42 } 43 } 44 }
标签:
原文地址:http://www.cnblogs.com/threezj/p/4493218.html