poj 2560
题意:有n个点,并且知道它们的坐标,求连接所有点的最短路径。
代码:
#include<iostream>
#include<fstream>
#include<cmath>
using namespace std;
double x[101],y[101];
double d[101];
double w[101][101];
int v[101];
int n;
void read(){
// ifstream cin("in.txt");
int i,j,k;
cin>>n;
for(i=1;i<=n;i++)
cin>>x[i]>>y[i];
for(i=1;i<=n;i++)
for(j=i+1;j<=n;j++)
{
w[i][j]=sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]));
w[j][i]=w[i][j];
}
double ans=0;
for(i=1;i<=n;i++)
d[i]=w[1][i];
while(1){
double minn=100000000;
j=-1;
for(i=1;i<=n;i++)
if(v[i]==0&&minn>d[i])
{
j=i;
minn=d[i];
}
if(j==-1)
{
printf("%.2lf\n",ans);
return;
}
ans+=d[j];
v[j]=1;
for(i=1;i<=n;i++)
if(v[i]==0&&d[i]>w[i][j])
d[i]=w[i][j];
}
}
int main(){
read();
return 0;
}
浙公网安备 33010602011771号