では、ゲームを始めましょう
GO FOR IT !

这题就非常有意思了

首先,这是一道floyed妙用题

我们要对floyed进行简单的修改

先看下题意,要我们求青蛙距离

简单讲就是更小的跳跃距离,无视总路程

那么我们知道floyed是求最短路径的算法,并且是动态规划思想

那么我们只要将转移方程改改不就行了么

那么该怎么改哩

1.首先判断要改

floyed求最短路径是在找到更优路时更新

我们要改成:判断一条路是否可以分割成更短的两条路

如图:(比较粗糙不要介意233)


点A____________________点B
   \                  /
     \              /
       \          /
          点C   /
           
           

我们可以看出来AC或BC的长度是比AB短的

这就满足if条件

2.然后是处理

这就用AB,AC中更长的一个替换AB,即BC

为什么更长的一个?

因为题目要求输出最大青蛙距离,就是最小值中的最大值

这样我们就有了核心代码:

for(res k=1;k<=m;++k)
    for(res i=1;i<=m;++i)
        for(res j=1;j<=m;++j)
            if(mmp[i][j]>mmp[i][k]&&mmp[i][j]>mmp[k][j]){
                mmp[i][j]=mmp[j][i]=max(mmp[i][k],mmp[k][j]);
            }

如果有不明白的,可以先模拟下

哪里讲的不好还请谅解,有问题可以私信我qwq

总访问量 访问人数