acwing 蓝桥杯 模拟 1219. 距离问题

158 阅读2分钟

1219. 移动距离

1219. 移动距离 - AcWing题库

这道题实际上是让我们按照蛇形排列一个二维数组,然后给定m,n两个点,求m,n之间最短距离。

我们正常的二维数组是这样的:

image.png

按照蛇形排列的话就需要把偶数行给反转一下:

image.png

现在我们先做一个操作:让序列号都减1,即下标从0开始,如图:

image.png

为什么要这样做,马上就会知道。

我们现在求一下题目给的题目给的两个楼号m,n的坐标。

求行号

题目给定一个宽度w,假设这个宽度是6,那么就可以画出下面这个图:image.png 规律:

(第0行的数) / w= 0

(第1行的数) / w =1 ……

按照这个进行递推,我们就可以得出每一行的行号,现在我们相求m,n的行号可以用如下来表达:

rowm=m/w rown=n/w

此时让下标从0开始的好处就体现出来了,倘若从1开始,那么第0行就没法体现了。

求列号

求列号我们怎么求呢?

规律:

(第0列的数) % w= 0

(第1列的数) % w =1

m,n的列号可以用如下来表达:

colm=m%w coln=n%w

知道了行号,知道了列号就可以求出m,n的坐标,求出m,n的坐标就可以套用公式求出它们之间的距离。

套公式求两点距离

我们求两点之间距离一般用两个公式:欧几里得公式,曼哈顿公式

欧式定理

欧几里得公式也叫欧式定理,用来求两点之间最短距离:

我们都知道两点之间直线最短,所以欧式定理适合于求可以直接走直线最短距离的场景:

image.png 公式:

image.png

曼哈顿定理

曼哈顿定理适合用于没办法直接求两点之间直接走直线到达的情况,例如一个十字路口到达另一个十字路口:

image.png

公式:

image.png

欧式定理和曼哈顿定理区别: image.png

根据题目给定的测试用例我们发现本题适合用曼哈顿定理来求m,n之间最短距离:

image.png

总结

  • 首先输入二维数组,但是遇到奇数行的话需要反转一下,怎么反转呢?

反转行

如下图,现在想反转7,12:

image.png

我们可以用 w(6)-7的下标记(0)-1=5(正好是12的下标) 再用 w(6)-12的下标(5)-1=0 (正好是7的下标)

这样就可以通过下标在输入的时候来完成反转:

image.png

最终可以得到一个反转之后的行:

image.png

-然后求出m,n的坐标,然后再用曼哈顿定理求m,n之间的最短距离

code

image.png

二刷

image.png

代码托管:AcWing 1219. 移动距离 - AcWing