【SSLGZ 1615】Frogger

题目描述
找出青蛙在最短路径中的最长距离(所谓蛙跳距离)。
输入
输入含有多组测试数据。每组测试资料的第一列有1个整数n,代表石头的数目(2 <= n <= 200)。接下来的n列每列有2个整数xi,yi(0 <= xi,yi <= 1000)代表第i颗石头的坐标。其中第一颗为Freddy所在的石头,第二颗为Fiona所在的石头。每组测试数据后有一空白列,当n=0时代表输入结束
输出
对每一组测试数据,输出一列这是第几组测试数据,以及一列蛙跳距离。
样例输入
2
0 0
3 4

3
17 4
19 4
18 5

0
样例输出
Scenario #1
Frog Distance = 5.000

Scenario #2
Frog Distance = 1.414
算法讨论
其实就是找最短路中的最长部分。在Dijkstra算法中顺便算出就好。

const
  maxn=200;
var
  a:array[1..maxn,1..maxn] of real;
  z:array[1..maxn,1..2] of longint;
  l:array[0..maxn] of real;
  v:array[1..maxn] of 0..1;
  i,j,n,m,t:longint;
  min,s:real;
begin
  while true do
    begin
      readln(n);
      if n=0
        then break;
      inc(m);
      for i:=1 to n do
        begin
          read(z[i,1],z[i,2]);
          for j:=1 to i-1 do
            begin
              a[i,j]:=sqrt(sqr(z[i,1]-z[j,1])+sqr(z[i,2]-z[j,2]));
              a[j,i]:=a[i,j]
            end;
        end;
      for i:=1 to n do
        l[i]:=a[1,i];
      fillchar(v,sizeof(v),0);
      v[1]:=1;
      s:=-maxlongint;
      for i:=1 to n-1 do
        begin
          min:=maxlongint;
          for j:=1 to n do
            if (l[j]<min) and (l[j]<>0)
              then begin
                     min:=l[j];
                     t:=j
                   end;
          if s<min
            then s:=min;
          if t=1
            then break; 
          l[t]:=0;
          for j:=1 to n do
            if a[t,j]<l[j]
              then l[j]:=a[t,j];
          if l[2]=0
            then break;
        end;
      writeln('Scenario #',m);
      writeln('Frog Distance = ',s:0:3);
      writeln;
    end;
end.

这里写图片描述
Pixiv ID:60367069

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值