最小生成树模板(prim前向星)
别人都是先学prim再学kruskal,我刚好反了。。。。
bool p[maxn];///maxn是点的个数,p记录状态 int dist[maxn];///dist记录最短边长 int pre[maxn];///pre记录连接信息 int prim(int n) { for(int i=1; i<=n; i++)dist[i]=mmax; for(int i=head[1]; i!=-1; i=tu[i].next) dist[tu[i].to]=tu[i].w,p[tu[i].to]=0,pre[tu[i].to]=1; dist[1]=0; p[1]=1; for(int i=1; i<n; i++) { int min0=mmax,k=0; for(int j=1; j<=n; j++) { if(!p[j]&&min0>dist[j]) { min0=dist[j]; k=j; } } if(k==0)return 0; p[k]=1; for(int j=head[k]; j!=-1; j=tu[j].next) if(!p[tu[j].to]&&tu[j].w<dist[tu[j].to]) dist[tu[j].to]=tu[j].w,pre[tu[j].to]=k; } int ans=0; for(int i=1;i<=n;i++) ans+=dist[i]; return ans; }
持续更新博客地址:
blog.csdn.net/martinue