【SSLGZ 1624】小萨的烦恼

本文介绍了一个基于邻接矩阵的最短路径问题求解方法,通过调整Floyd算法来计算每个点到其它点的距离,考虑步行和乘车两种方式,并判断是否能在限定时间内往返于特定两点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述
可以做一次车(一张车票可用于往返),走路时间是边权两倍,坐车时间就是边权。给出每个点到其他点距离(若为0则不相连),给出限制时间和目的地,问能否在限定时间内往返。
输入
第一行有三个整数N、T、S 。接下来是一个N*N的邻接矩阵。两两车站之间的距离不超过10^9。
输出
若小萨他们不能在限定时间内赶回学校,那么输出“You are day dreaming!”(不包括引号)。否则,输出一个整数,为他们所需要花费的最少时间。
样例输入
4 5 4
0 1 1 1
1 0 1 1
1 1 0 1
1 1 1 0
样例输出
2
算法讨论
a[i,j,1]表示不做车耗时,a[i,j,2]表示坐车耗时,然后将Floyd略微改动一下即可。

const
  maxn=102;
var
  a:array[1..maxn,1..maxn,1..2] of longint;
  i,j,k,n,t,s:longint;
begin
  read(n,t,s);
  for i:=1 to n do
    for j:=1 to n do
      begin
        read(a[i,j,2]);
        if a[i,j,2]=0
          then a[i,j,2]:=100000001;
        a[i,j,1]:=a[i,j,2]*2;
      end;
  for k:=1 to n do
    for i:=1 to n do
      for j:=1 to n do
        if (j<>k) and (i<>k) then
        begin
          if a[i,k,1]+a[k,j,1]<a[i,j,1]
            then a[i,j,1]:=a[i,k,1]+a[k,j,1];
          if a[i,k,1]+a[k,j,2]<a[i,j,2]
            then a[i,j,2]:=a[i,k,1]+a[k,j,2];
          if a[i,k,2]+a[k,j,1]<a[i,j,2]
            then a[i,j,2]:=a[i,k,2]+a[k,j,1]
        end;
  a[1,s,2]:=a[1,s,2]*2;
  if a[1,s,2]<=t
    then writeln(a[1,s,2])
    else writeln('You are day dreaming!')
end.

这里写图片描述
Pixiv ID:58898400

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值