标签:
prim算法
#include <iostream> #include <cstring> #include <cstdio> using namespace std; const int INF=999999999; double map[55][55],dist[55]; bool visit[55]; int n; void chu() { for(int i=0;i<=n;i++) for(int j=0;j<=n;j++) { if(i==j) map[i][j]=0; else map[i][j]=map[j][i]=INF; } } double prim() { double ans=0,minn; int node; memset(visit,false,sizeof(visit)); node=1; for(int i=1;i<=n;i++) if(i!=node) dist[i]=map[node][i]; //dist[1]=0; visit[1]=true; for(int i=1;i<n;i++) { minn=INF; for(int j=1;j<=n;j++) if(visit[j]==false&&dist[j]<minn) { minn=dist[j]; node=j; } ans+=minn; visit[node]=true; for(int j=1;j<=n;j++) if(visit[j]==false&&dist[j]>map[node][j]) dist[j]=map[node][j]; // printf("%.2lf\n",ans); } return ans; } int main() { int vi,vj; double w,ans; while(cin>>n) { if(n==0) break; chu(); for(int i=1;i<=n*(n-1)/2;i++) { cin>>vi>>vj>>w; if(w<map[vi][vj]) map[vi][vj]=map[vj][vi]=w; } ans=prim(); printf("%.2lf\n",ans); } return 0; }
标签:
原文地址:http://www.cnblogs.com/nefu929831238/p/5380036.html