#include "iostream"
#include "stdio.h"
#include "math.h"
#include "map"
#include "vector"
#include "queue"
#include "memory.h"
#include "algorithm"
#include "string"
using namespace std;
#define N 105
#define INF 1<<30
struct NODE
{
double x,y;
};
NODE island[N];
bool visited[N];
double dis[N][N];
int S_set[N];
double DIS(NODE a,NODE b)
{
double x= sqrt((b.x-a.x)*(b.x-a.x)+(b.y-a.y)*(b.y-a.y));
if(x<10||x>1000)
return INF;
return x;
}
int main()
{
int cas,i,j,n,k;
scanf("%d",&cas);
while(cas--)
{
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%lf%lf",&island[i].x,&island[i].y);
memset(dis,-1,sizeof(dis));
for(i=1;i<=n;i++)
for(j=1;j<i;j++)
dis[i][j]=dis[j][i]=DIS(island[i],island[j]);
memset(visited,false,sizeof(visited));
visited[1]=true;
S_set[1]=1;
double ans=0;
bool flag=true;
for(i=2;i<=n;i++) //n-1 roads
{
double minn=INF;
int point;
//find the shortest path
for(j=1;j<i;j++)//have i points in S_set currently
{
int cur_p=S_set[j];
for(k=1;k<=n;k++)
{
if(cur_p!=k&&minn>dis[cur_p][k]&&dis[cur_p][k]>0&&!visited[k])
{
minn=dis[cur_p][k];
point=k;
}
}
}
if(minn==INF)
{
flag=false;
break;
}
ans+=minn;
S_set[i]=point;
visited[S_set[i]]=true;
}
if(!flag){
cout<<"oh!"<<endl;
continue;}
printf("%.1lf\n",ans*100);
}
}
—————————————————————————————————
本文原创自Slience的csdn技术博客。
本博客所有原创文章请以链接形式注明出处。
欢迎关注本技术博客,本博客的文章会不定期更新。
大多数人想要改造这个世界,但却罕有人想改造自己。
世上没有绝望的处境,只有对处境绝望的人。
————By slience
—————————————————————————————————