Python 河内塔代表处
我在用python实现这个问题时遇到了如下问题。我理解最初的河内塔问题,也就是说,可以移动$N$个磁盘到第三个磁盘,并且有算法可以这样做,但我不知道如何在每个阶段列出每个单独的磁盘。问题如下: 我想我可以使用二叉树表示法,如下所示: 到目前为止,我所想到的粗略的框架代码看起来与Python 河内塔代表处,python,algorithm,recursion,Python,Algorithm,Recursion,我在用python实现这个问题时遇到了如下问题。我理解最初的河内塔问题,也就是说,可以移动$N$个磁盘到第三个磁盘,并且有算法可以这样做,但我不知道如何在每个阶段列出每个单独的磁盘。问题如下: 我想我可以使用二叉树表示法,如下所示: 到目前为止,我所想到的粗略的框架代码看起来与 def recursion(m,n,T): pos = list(range(1,m)) index = 0 values = list(range(1,n)) tree = []
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
如果您没有将磁盘数传递给函数,我将非常感谢您的帮助,并且在您下次调用函数时,必须减少磁盘数。还有一个条件可以打破进一步的递归。这是修改过的表格
# 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')
这与ksai解决方案非常相似,只是它适用于Python3,我删除了额外的print和return语句
def move(disk , from_rod, to_rod, aux_rod):
if disk >= 1:
move(disk-1, from_rod, aux_rod, to_rod)
print ("Move disk", disk, "from rod", from_rod, "to rod", to_rod)
move(disk-1, aux_rod, to_rod, from_rod)
n = 3
move(n, 'A', 'B', 'C')
输出:
非常感谢。如果我想指定任意数量的杆,我会怎么做?我也想看到每一步可能的移动。例如,在T=2时,我有两种可能的移动方式。@PutsandCalls Tower of hanoi当且仅当磁盘数大于或等于3时,问题才成为问题