河内塔初始配置?

时间:2017-04-21 20:49:52

标签: recursion towers-of-hanoi

我正在阅读我朋友为他的河内解决方案塔写的代码。但是我很难弄清楚他的代码是什么,因为我不了解他的初始配置和结束配置。

def T(init, final):
    if len(init) == 0:
        return 
    if init[0] == final[0]:
        T(init[1:], final[1:])
    else:
        fro = init[0]
        to = final[0]
        spare = other(init[0], final[0])
        ic = spare * (len(init) - 1)
        T(init[1:], ic)
        print("move from %s to %s  " % (fro, to))
        T(ic, final[1:])

def other(char1, char2):
    towers = "ABC"
    towers = towers.replace(char1, "")
    towers = towers.replace(char2, "")
    return towers

init = "ABCBA"
final = "BCBAC"
T(init, final)

在这里,他有init =" ABCBA"最后=" BCBAC"。代码工作正常,但我不明白为什么他这样做。

感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

初始化和最终配置只是磁盘大小从大到小的顺序以及它们各自的棒,表示为字母(在这种情况下为A,B或C)。

init = "ABCBA"是指您在'A'处拥有最大磁盘,在'B'处具有第二大磁盘,在'C'处具有第三大磁盘,等等。

说,你有

init = "AB"
final = "AA"

程序将输出

move from B to A  

因为您有一个较小的磁盘位于B,所以您只需将其移至A即可获得AA。