到目前爲止,我知道如何做3塔河內塔,但我不知道如何實現4塔的幀管家算法。4座塔河內塔
這就是我目前的三塔函數的樣子。
def move_three_towers(n, from_tower, to_tower, spare_tower):
if (n > 0):
move_three_towers(n-1, from_tower, spare_tower, to_tower)
print(from_tower, ' --> ', to_tower)
move_three_towers(n-1, spare_tower, to_tower, from_tower)
我需要幫助實施n - k磁盤到另一個塔使用4塔。對於某些1≤k < n
這裏是我的算法嘗試,但它不起作用,請幫助。
def move_four_towers(n, k = 0, from_tower, to_tower, spare_tower1, spare_tower2):
if n == 1:
print(from_tower, ' --> ', to_tower)
if n > 1:
move_four_towers(n - k, from_tower, spare_tower2, spare_tower1, to_tower)
print(from_tower, ' --> ', to_tower)
move_three_towers(k, from_tower, to_tower, spare_tower1)
move_four_towers(n - k, spare_tower2, to_tower, spare_tower1, from_tower)
@kindall:框架管家算法給其被推測爲在的移動次數最佳的解決方案。你的確不是。 – hivert
但我想優化我的解決方案,使用幀斯圖爾特算法,忽略了一個塔擊敗了4塔的目的。 – Spock
好吧,想一想如果用手解決遊戲,你會用另一個塔。試試4張光盤,首先使用3個塔,然後使用4.您如何使用第四個塔來更快解決問題? – kindall