最小生成树prim、

过年那几天确实没好好学习、在老家闲着也是闲着、可是就是没看书、

回来这几天又一直在弄个人博客、买域名云服务器备案什么的- -、 麻烦死了呢、

在腾讯花1块钱备案了一个网站www.goodgoodstudy.pw,起名字的时候实在是纠结,索性来了个无聊的

备案完成后还是决定在阿里云再备案一个网站,我也说不上原因- - 、 先凑合着用吧

最小生成树prim算法、

 1 //prim算法生成最小生成树
 2 void prim(MGriph G)
 3 {
 4     int minx,k;
 5     sum=0;
 6     memset(vis,false,sizeof(vis));    //初始化访问顶点数组 
 7     vis[0]=true;                    //将顶点Vo加入到最小生成树中、 
 8     for(int i=1;i<numVertexes;++i)    //初始化当前的最小生成树的最小权值数组 
 9         lowcost[i]=map[0][i];
10     for(int i=1;i<numVertexes;++i){     
11         minx=INT_MAX;
12         for(int j=1;j<numVertexes;++j)        //寻找当前的最小权值顶点、
13             if(!vis[j] && minx > lowcost[j])
14                 minx = lowcost[k = j];
15         if(minx==INT_MAX)    break;
16         vis[k]=ture;    //将最小权值顶点加入最小生成树集合 、 
17         sum+=minx;        // 记录权值的和、 
18         for(int j=1;j<numVertexes;++j)        //更新当前最小生成数中的最小权值数组、 
19             if(!vis[j] && lowcost[j] > map[k][j])
20                 lowcost[j] = map[k][j]; 
21     }
22 }

要理解代码最主要是要理解lowcost数组和vis数组的作用,vis数组的话是记录当前最小生成树的顶点数,当vis[i]=ture的时候代表Vi顶点已经加入到最小生成树中来了,否者没有,lowcost数组的作用呢就是记录当前最小生成树中各顶点与其有边的顶点间的最小权值

这是我对这段代码的理解、

原文地址:https://www.cnblogs.com/sasuke-/p/5187497.html