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

被折叠的 条评论
为什么被折叠?



