到目前为止,我知道如何用3座塔楼做河内塔,但我不知道如何为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)
我需要帮助使用4个塔实现n-k磁盘到另一个塔。对于一些1≤k<1。 Ñ
这是我对算法的尝试,但它不起作用,请帮忙。
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)
答案 0 :(得分:1)
维基百科对r
钉和n个磁盘的算法进行了很好的描述:
可以递归地描述算法:
对于某些
k
,1 <= k < n
,将顶部k
磁盘转移到除起始或目标挂钩之外的单个挂钩,并执行T(k,r)
次移动。< / p>在不打扰现在包含前k个磁盘的挂钩的情况下,将剩余的
n-k
磁盘转移到目标挂钩,仅使用剩余的r-1
挂钩,进行T(n-k,r-1)
次移动。最后,将
k
个热门转移到目的地挂钩,进行T(k,r)
次移动。