码迷,mamicode.com
首页 > 编程语言 > 详细

一步两步学算法之最小生成树Prim算法

时间:2015-05-10 23:57:45      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:

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 }

 

一步两步学算法之最小生成树Prim算法

标签:

原文地址:http://www.cnblogs.com/threezj/p/4493218.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!