zoj1203

来源:互联网 发布:淘宝网儿童保护电插头 编辑:程序博客网 时间:2024/05/25 05:36

zoj网站上不去了

写了代码也还没来得及测试

隐约觉得应该会有问题

不过目前测试的数据还是对的。。。

#include<iostream>#include<math.h>#include<algorithm>using namespace std;const int N = 100;int n,v[N+2],x;double s,r[N+2][2];struct dis{double n1;double n2;double d;}m[N*N];bool cmp(dis a,dis b){return a.d<b.d;}int Dis(){int i = 0, j = 0, k = 0;for (i = 1; i < n; i++){for (j = i + 1; j <= n; j++){m[k].n1 = i;m[k].n2 = j;m[k].d = sqrt((r[i][0] - r[j][0])*(r[i][0] - r[j][0]) + (r[i][1] - r[j][1])*(r[i][1] - r[j][1]));k++;}}return k;}void input(){int  i = 0;for (i = 0; i < n; i++){scanf_s("%lf %lf", &r[i][0], &r[i][1]);//cin >> r[i][0] >> r[i][1];}}void mintree(int x1,int x2,int i){x1 = v[x1];x2 = v[x2];if (x1 == x2){if (!x1){v[x1]--;v[x2] = x1;s = s + m[i].d;x++;}}else{if (x1*x2){v[x1] = v[x1] + v[x2];v[x2] = x1;s = s + m[i].d; x++;}else{if (x1){v[x1]--;v[x2] = x1;s = s + m[i].d; x++;}else{v[x2]--;v[x1] = x2;s = s + m[i].d; x++;}}}}int find(int mm){if (v[mm] > 0){while (v[mm] > 0){mm = v[mm];}}return mm;}int main(){int i=0,x1=0,x2=0,k=0,t=1;while (scanf_s("%d",&n)&&n)//cin>>n{input();k=Dis();        sort(m,m+k,cmp);while (x != n - 1){x1 = find(m[i].n1);x2 = find(m[i].n2);mintree(x1,x2,i);i++;}printf( "Case #%d:\n",t);printf("The minimal distance is:%.2lf", s);x = 0; i = 0; s = 0; t++;}system("pause");return 0;}

原创粉丝点击