I';我在用python为河内塔问题找到正确的迭代方法时遇到了问题
我被指派用python为河内塔问题找到一个迭代解决方案,我还发现了一些伪代码,它们确实很有帮助。唯一的问题是,此伪代码无助于向后移动磁盘。以下代码确实显示了运动中涉及的正确两极,但并不总是正确的方向。有人知道如何解决这个问题,或者知道不同的解决方案吗?下面是我找到伪代码的站点的链接。(我的代码以以下定义开头,但我无法使其也位于代码块中)I';我在用python为河内塔问题找到正确的迭代方法时遇到了问题,python,Python,我被指派用python为河内塔问题找到一个迭代解决方案,我还发现了一些伪代码,它们确实很有帮助。唯一的问题是,此伪代码无助于向后移动磁盘。以下代码确实显示了运动中涉及的正确两极,但并不总是正确的方向。有人知道如何解决这个问题,或者知道不同的解决方案吗?下面是我找到伪代码的站点的链接。(我的代码以以下定义开头,但我无法使其也位于代码块中) 对我来说,代码运行良好,您的问题代码中有一个输入错误(最后一个if语句zetten.append()而不是moves.append()) 到底出了什么问题,您希
对我来说,代码运行良好,您的问题代码中有一个输入错误(最后一个if语句zetten.append()而不是moves.append())
到底出了什么问题,您希望它做什么?向后移动应该是什么?例如,如果n=3,正确的代码是['AC','AB','CB','AC','BA','BC','AC'],而我的代码是['AC','AB','BC','AC','AB','BC','AC']。因此,在我的代码中,“BC”和“AB”应该切换,因为你将光盘从C极移到B极,而不是从其他极移到B极。我现在的代码没有区分光盘移动的方向,在我的代码中光盘总是向右移动。因此,我的代码对于移动发生的特定极是正确的,而不是方向。@Thomas that问题来自附加列表的语句。
moves.append(起始字母+中间字母)
它将始终按该顺序插入字母。
def hanoi_iterative(n):
moves = []
number_of_moves = 2**n-1
starting_pole = 'A'
middle_pole = 'B'
end_pole = 'C'
i = 0
if n % 2==0:
end_pole = 'B'
middle_pole = 'C'
while i in range(0,number_of_moves):
i +=1
if i%3 == 1:
moves.append(starting_pole + end_pole)
if i%3 == 2:
moves.append(starting_pole + middle_pole)
if i%3 == 0:
zetten.append(middle_pole + end_pole)
return moves
def hanoi_iterative(n):
moves = []
number_of_moves = 2**n-1
starting_pole = 'A'
middle_pole = 'B'
end_pole = 'C'
i = 0
if n % 2==0:
end_pole = 'B'
middle_pole = 'C'
while i in range(0,number_of_moves):
i +=1
if i%3 == 1:
moves.append(starting_pole + end_pole)
if i%3 == 2:
moves.append(starting_pole + middle_pole)
if i%3 == 0:
moves.append(middle_pole + end_pole)
return moves
print(hanoi_iterative(3))