从(0,0)开始,我必须以这样的方式到达(x,y),在任何一点上,如果上一次移动是向上/向下,我可以向左/向右移动一步,反之亦然。需要的最小移动次数是多少?
答案 0 :(得分:0)
首先要注意的是:移动的顺序并不重要(向上,向上,向左相当于向上,向左,向上)。
因此约束变为number of horizontal moves = number of vertical moves ± 1
。
您必须移至(x, y)
(x + y
移动),然后沿x轴移动(假设为x < y
),以便number of horizontal moves = number of vertical moves ± 1
。
因此答案为x + y + 2*k
,x + 2*k = y
或x + 2*k = y - 1
。
答案 1 :(得分:0)
根据声明,每个左右运动必须遵循 up-down 移动,反之亦然,以下公式可以给你长度最短路径。
让我们假设x
和y
是我们需要朝两个方向行走的正距离,所以
x,y∈ℕ + ⋃{0}
然后
steps = min(x,y)×2 + 4×floor(abs(x-y)/ 2)+(x + y)mod 2
其中
a
和b
值,例如 min(1,2)= 1 ; x
的整个部分,没有分数部分,如 floor(4.5)= 4 ; x
与零的正距离,如 abs(-3)= abs(3)= 3 ; x / y
的模数(或余数),如 11/2 = 5,余数为1 ; 示例:
(0, 10)
步骤为20
; (1, 10)
步骤为19
; (8, 5)
步骤为15
; (3, 3)
步骤为6
; 等...