E:/GitHub/suanfaquti/Q26高效的立体停车场.py
'''
问题描述(有修改)
10*10的棋盘上放了10*10-1的棋子,右下角空白。每次可以交换空白和它相邻的一个棋子,
求将左上角的棋子移动到右下角的最少次数
分析
棋子只能右移或者下移,否则不是最少。则移动棋子前空白在棋子右/下,交换后在左/上。
那么整个移动过程可以分成两步,重复这两步a+b次即可(设棋盘变成是a和b)
步骤1:将空白移动到棋子右/下
步骤2:交换空白和棋子
步骤1一共a+b次,步骤2第一个值是a+b-1,此后每个值都是2或者4,
棋子改变移动方向时是2,不变是4,这说明最短方法就是尽可能多的改变方向
'''
a,b=100,100
def getStep(a,b):
if b>a:
a,b=b,a
elseStep=max(0,4*(a-b)-2)
return a+b+(a+b-1)+(2*b*2-2)+elseStep
print(getStep(a,b)) #69
'''
问题描述(有修改)
10*10的棋盘上放了10*10-1的棋子,右下角空白。每次可以交换空白和它相邻的一个棋子,
求将左上角的棋子移动到右下角的最少次数
分析
棋子只能右移或者下移,否则不是最少。则移动棋子前空白在棋子右/下,交换后在左/上。
那么整个移动过程可以分成两步,重复这两步a+b次即可(设棋盘变成是a和b)
步骤1:将空白移动到棋子右/下
步骤2:交换空白和棋子
步骤1一共a+b次,步骤2第一个值是a+b-1,此后每个值都是2或者4,
棋子改变移动方向时是2,不变是4,这说明最短方法就是尽可能多的改变方向
'''
a,b=100,100
def getStep(a,b):
if b>a:
a,b=b,a
elseStep=max(0,4*(a-b)-2)
return a+b+(a+b-1)+(2*b*2-2)+elseStep
print(getStep(a,b)) #69