| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
我的也是 高手看看!In Reply To:大牛帮忙看看,为什么C++AC G++WA Posted by:seu_cl at 2009-06-26 13:47:09 #include <iostream>
#include<stdio.h>
#include<math.h>
#include<memory>
#include<string.h>
using namespace std;
int N;
double x[105],y[105],z[105],r[105];
double dis[105];
int visited[105];
double ans;
double getdis(int i,int j)
{
double t = sqrt((x[i] - x[j]) *(x[i] - x[j]) + (y[i] - y[j]) * (y[i] - y[j]) + (z[i] - z[j]) * (z[i] - z[j]));
if(t > r[i] + r[j])return t - r[i] - r[j];
else return 0;
}
void prim()
{
ans = 0.0;
for(int i = 0 ;i < N;i ++)
{
dis[i] = getdis(0,i);
}
memset(visited,0,sizeof(visited));
visited[0] = 1;
for(int i = 1 ; i < N ; i ++)
{
int u = 0;
double min = 10000.0;
for(int j = 0 ; j < N ;j ++)
{
if(visited[j] == 0 && min > dis[j])
{
min = dis[j];
u = j;
}
}
visited[u] = 1;
ans = ans + min;
for(int j = 0 ; j < N ; j ++)
{
if(visited[j] == 0)
{
double t = getdis(u,j);
if(dis[j] > t)
dis[j] = t;
}
}
}
printf("%.3lf\n",ans);
}
int main()
{
freopen("datain.in","r",stdin);
while(scanf("%d",&N) && N)
{
for(int i = 0;i < N;i ++)
{
scanf("%lf%lf%lf%lf",&x[i],&y[i],&z[i],&r[i]);
}
prim();
}
return 0;
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator