先计算每两点的距离,然后用prime #include<stdio.h> #include<math.h> float matr[100][100],weight[100], x[100],y[100]; int main() { int n,i,j,k;float sum = 0,min = 0; scanf("%d",&n); for(i = 0;i < n;i++) scanf("%f%f",&x[i],&y[i]); for(i = 0;i < n;i++) for(j = 0;j < n;j++) matr[i][j] = 1<<30; for(i = 0;i < n-1;i++) for(j = i+1;j < n;j++) matr[i][j] = matr[j][i] = sqrt( (x[i]-x[j])*(x[i]-x[j]) + (y[i]-y[j])*(y[i]-y[j])); for(i = 0;i < n;i++) weight[i] = matr[0][i]; weight[0] = 0; i = 1; while(i < n) { min = 1<<30; j = 0; while(j < n) { if(weight[j]&&weight[j]<min) { min = weight[j]; k = j; } j++; } sum+=min; weight[k] = 0; for(j = 0;j < n;j++) if(matr[k][j] < weight[j]) weight[j] = matr[k][j]; i++; } printf("%.2f/n",sum); return 0; }