最小生成树 Prim算法实现 #include<stdio.h> #define inf 10000 int main(){ int c[22][22]; int used[22]; int closest[22]; int lowcost[22]; int ans,m,n,i,j,a1,b1,c1; scanf("%d",&m); for(int t=0;t<m;t++){ ans=0; scanf("%d",&n); for(i=1;i<=n;i++) for(j=1;j<=n;j++) if(i==j) c[i][j]=0; else c[i][j]=inf; scanf("%d%d%d",&a1,&b1,&c1); while(a1!=0&&b1!=0&&c1!=0){ c[a1][b1]=c1; c[b1][a1]=c1; scanf("%d%d%d",&a1,&b1,&c1); } used[1]=1; for(i=1;i<=n;i++){ lowcost[i]=c[1][i]; closest[i]=1; used[i]=0; } for(i=1;i<n;i++){ int min=inf; int v=1; for(j=2;j<=n;j++) if((lowcost[j]<min)&&used[j]==0){ min=lowcost[j]; v=j; } used[v]=1; ans+=c[v][closest[v]]; for(j=2;j<=n;j++) if(c[v][j]<lowcost[j]&&used[j]==0){ lowcost[j]=c[v][j]; closest[j]=v; } } printf("%d/n",ans); } return 0; }