河内代表塔

时间:2017-07-24 01:51:57

标签: python algorithm recursion

我在python中实现问题的方法如下。我理解最初的河内塔问题,即可以移动$ N $磁盘说第3个磁盘,并且有算法可以这样做,但我无法弄清楚如何列出每个阶段的每个磁盘。问题如下:

enter image description here

我想我可以使用如下所示的二叉树表示:

enter image description here

到目前为止,我想到的粗略的骨架代码看起来像是

def recursion(m,n,T):
    pos = list(range(1,m))
    index = 0
    values = list(range(1,n))
    tree = []
    if pos[index+1] > pos[index]:
        pos[index + 1] -=  pos[index+1]
        pos[index + 2] += pos[index+1]
        tree.append(pos)
    if pos[index+1] < pos[index]:
        pos[index+1] += pos[index]
        pos[index] -= pos[index]
        tree.append(pos)
    else:
        recursion()
    return tree

我非常感谢您对此提供的一些帮助

2 个答案:

答案 0 :(得分:1)

你没有通过否。磁盘到您的功能,并且每次下次调用该函数时都必须减少此数字。并且有一个条件可以打破进一步的递归。这是修改后的表格

# n = no. of rods
def recurse(n , from_rod, to_rod, aux_rod):
    if n == 1:
        print "Move disk 1 from rod", from_rod, "to rod",to_rod
        return
    recurse(n-1, from_rod, aux_rod, to_rod)
    print "Move disk", n, "from rod", from, "to rod", to
    recurse(n-1, aux_rod, to_rod, from_rod)

n = 5
recurse(n, 'A', 'B', 'C')

答案 1 :(得分:0)

这与ksai解决方案非常相似,只不过这是针对python 3的,我删除了多余的print和return语句

... where b1 != b2

输出:

enter image description here