剑鱼行动
2017-03-25 11:09
471 查看
剑鱼行动
Time Limit:10000MS Memory Limit:65536K
Total Submit:93 Accepted:79
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
n,i,j,k,t:longint;
min,ans:real;
x,y,v:array[0..101]of real;
a:array[0..101,0..101]of real;
begin
readln(n);
for i:=1 to n do
begin
readln(x[i],y[i]);
for j:=1 to i-1 do
begin
a[i,j]:=sqrt(sqr(x[i]-x[j])+sqr(y[i]-y[j]));
a[j,i]:=a[i,j];
end;
end;
fillchar(v,sizeof(v),#0);
v[1]:=1;
for i:=1 to n-1 do
begin
min:=maxlongint;
for j:=1 to n do
if v[j]=1 then
for k:=1 to n do
if v[k]=0 then
if (a[j,k]<min)and(a[j,k]<>0) then
begin
min:=a[j,k];
t:=k;
end;
if min<>maxlongint then
begin
ans:=ans+min;
v[t]:=1;
end;
end;
write(ans:0:2);
end.
方法2:(本方法从集合变成广搜(擦不多),就是把每一个点关联起来,每枚举一个点就更新(同化)父节点);
var
n,i,j,k,q,p,t:longint;
tj,min:real;
x,y:array[0..200]of real;
f:array[0..200]of longint;
a:array[0..200,0..200]of real;
begin
readln(n);
for i:=1 to n do
readln(x[i],y[i]);
for i:=1 to n do
begin
for j:=1 to n do
begin
a[i,j]:=sqrt(sqr(x[i]-x[j])+sqr(y[i]-y[j]));
end;
end;
tj:=0;
for i:=1 to n do
f[i]:=i;
for k:=1 to n-1 do
begin
min:=maxlongint;
for i:=1 to n do
for j:=1 to n do
if (f[i]<>f[j])and(a[i,j]<min)and(a[i,j]<>0) then
begin
min:=a[i,j];
p:=j;
q:=i;
end;
tj:=tj+min;
t:=f[p];
for i:=1 to n do
if f[i]=t then f[i]:=f[q];
end;
write(tj:0:2);
end.
Time Limit:10000MS Memory Limit:65536K
Total Submit:93 Accepted:79
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
n,i,j,k,t:longint;
min,ans:real;
x,y,v:array[0..101]of real;
a:array[0..101,0..101]of real;
begin
readln(n);
for i:=1 to n do
begin
readln(x[i],y[i]);
for j:=1 to i-1 do
begin
a[i,j]:=sqrt(sqr(x[i]-x[j])+sqr(y[i]-y[j]));
a[j,i]:=a[i,j];
end;
end;
fillchar(v,sizeof(v),#0);
v[1]:=1;
for i:=1 to n-1 do
begin
min:=maxlongint;
for j:=1 to n do
if v[j]=1 then
for k:=1 to n do
if v[k]=0 then
if (a[j,k]<min)and(a[j,k]<>0) then
begin
min:=a[j,k];
t:=k;
end;
if min<>maxlongint then
begin
ans:=ans+min;
v[t]:=1;
end;
end;
write(ans:0:2);
end.
方法2:(本方法从集合变成广搜(擦不多),就是把每一个点关联起来,每枚举一个点就更新(同化)父节点);
var
n,i,j,k,q,p,t:longint;
tj,min:real;
x,y:array[0..200]of real;
f:array[0..200]of longint;
a:array[0..200,0..200]of real;
begin
readln(n);
for i:=1 to n do
readln(x[i],y[i]);
for i:=1 to n do
begin
for j:=1 to n do
begin
a[i,j]:=sqrt(sqr(x[i]-x[j])+sqr(y[i]-y[j]));
end;
end;
tj:=0;
for i:=1 to n do
f[i]:=i;
for k:=1 to n-1 do
begin
min:=maxlongint;
for i:=1 to n do
for j:=1 to n do
if (f[i]<>f[j])and(a[i,j]<min)and(a[i,j]<>0) then
begin
min:=a[i,j];
p:=j;
q:=i;
end;
tj:=tj+min;
t:=f[p];
for i:=1 to n do
if f[i]=t then f[i]:=f[q];
end;
write(tj:0:2);
end.
相关文章推荐
- 思想已经高过行动好多了
- 利用 .NET Compact Framework开发行动装置数据库应用程序
- 向IT界倡议——援助程序员王俊行动
- 多一份感动,多一份行动[动物园的猪 发表于 2004-11-15]
- 扫盲行动之:Vi编辑器的基本使用方法!
- 从睡前行动看男人秘密
- 你就是web设计高手,现在行动免费送书
- 没有行动的梦想,就是空想
- 目标、计划、行动
- 创业要少些空谈多些行动
- 多点实际行动,少点空想,日事日清
- 汶川地震 众志成城 全民行动 抗震救灾 你捐款了吗
- 行动前感言,欢迎广大同行加入给本人以指导
- 上海旅游业迎世博600天行动计划公布
- 行动才是勇者
- 我能创未来——中国青年创业行动
- 蚀“日”行动:一个硅谷传奇的《甲申三百年祭》(下)
- 播下一个行动,收获一种习惯;播下一种习惯,收获一种性格;播下一种性格,收获一种命运
- 行动召唤按钮:实例与最佳实践
- ERP实施前需先思考再行动