(ssl1618)剑鱼行动

本文介绍了一个基于坐标构建最小生成树的问题,并提供了一段完整的Pascal语言实现代码。该问题要求通过计算各点间的欧氏距离来构造一棵最小生成树,使所有点被连接且总路径长度最短。

剑鱼行动

Time Limit:10000MS  Memory Limit:65536K
Total Submit:103 Accepted:86 
Case Time Limit:1000MS

Description

给出N个点的坐标,对它们建立一个最小生成树,代价就是连接它们的路径的长度,现要求总长度最小。N的值在100以内,坐标值在[-10000,10000].结果保留二位小数

Input

5 ---------------5个点 
0 0 ---------------5个点点的坐标 
0 1 
1 1 
1 0 
0.5 0.5 

Output

2.83

Sample Input

 

Sample Output

 

Source

zju

var
 a:array[0..100,0..100]of real;
 l:array[0..100]of real;
 z:array[0..100,1..2]of real;//计坐标
 v:array[0..100]of boolean;
 n,i,j,k:longint;
 ans:real;
begin
 readln(n);
 for i:=1 to n do readln(z[i,1],z[i,2]);//读入坐标
 for i:=1 to n do
  for j:=1 to n do
   a[i,j]:=sqrt(sqr(z[i,1]-z[j,1])+sqr(z[i,2]-z[j,2]));//求它们之间的距离
 fillchar(v,sizeof(v),true);
 fillchar(l,sizeof(l),$7F);
 l[1]:=0;
 for i:=1 to n-1 do
  begin
   k:=0;
   for j:=1 to n do
    if (l[j]<l[k]) and (v[j]) then k:=j;
   v[k]:=false;
   for j:=1 to n do
    if (a[k,j]<l[j]) and (v[j]) then l[j]:=a[k,j];
  end;
 for i:=1 to n do
  ans:=ans+l[i];
 writeln(ans:0:2);
end.
//详见上一条博客,只改了输入(一下水5题的快感~)http://blog.youkuaiyun.com/ssl_lzx/article/details/67645720

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值