【Python】汉诺塔问题

count = 0def hannuota(n,src,dst,mid):      #n是圆盘数,src是起始,dst是目标,mid是过度    global count    if n == 1:        print(‘{}:{}->{}‘.format(1,src,dst))  #当圆盘是1时,从起始柱子移到目标柱子        count += 1    else:        hannuota(n-1,src,mid,dst)      #剩余的圆盘从A移到B柱子        print(‘{}:{}->{}‘.format(n,src,dst))  #最大的圆盘从A移到C柱子        count += 1          hannuota(n-1,mid,dst,src)      #剩余的圆盘从B柱子到C柱子hannuota(3,‘A‘,‘C‘,‘B‘)print(count)

#我现在理解的是->设想有1,2,3,4,5个圆盘,先把上面四个圆盘从A移到B柱子,然后把5从A移到C柱子,然后把1234从B移到C柱子,然后把这些动作分解成n=1。#我也搞不懂,好难啊!

原文地址:https://www.cnblogs.com/naraka/p/8970903.html

时间: 2024-10-05 23:47:41

【Python】汉诺塔问题的相关文章

python - 汉诺塔

#!/usr/bin/env python # 24 - 递归 汉诺塔 # Q1: """ 汉诺塔原型 三个柱子,64块金片 思路: 1. 将x上的63个盘子借助Z移动到Y上 2. 将Y上的63个盘子借助X移动到Z上 问题1: 将x上的63个盘子借助Z移动到Y上.拆解为: 1. 将62个盘子从x移动到Z上 2. 将最底下的第63个盘子移动到y上 3. 将z上的62个盘子移动到Y上 问题2: 将Y上的63个盘子借助X移动到Z上,拆解为: 1. 将62个盘子从y移动到x上 2.

python汉诺塔

python动画实现: 代码如下: import turtle class Stack: def __init__(self): self.items = [] def isEmpty(self): return len(self.items) == 0 def push(self, item): self.items.append(item) def pop(self): return self.items.pop() def peek(self): if not self.isEmpty()

python汉诺塔实现思路

汉诺塔的目标:把A柱子上的N个盘子移动到C柱子 递归的思想就是把这个目标分解成三个子目标 子目标1:将前n-1个盘子从a移动到b上 子目标2:将最底下的最后一个盘子从a移动到c上 子目标3:将b上的n-1个盘子移动到c上 move(n, a, b, c):     n==:         (a++c)         move(n-,a,c,b)//子目标1:将前n-1个盘子从a移动到b上     move(,a,b,c)//子目标2:将最底下的最后一个盘子从a移动到c上     move(n

Python汉诺塔问题

汉诺塔描述 古代有一座汉诺塔,塔内有3个座A.B.C,A座上有n个盘子,盘子大小不等,大的在下,小的在上,如图所示.有一个和尚想把这n个盘子从A座移到C座,但每次只能移动一个盘子,并且自移动过程中,3个座上的盘子始终保持大盘在下,小盘在上.在移动过程中可以利用B座来放盘子. 代码: import turtle class Stack: def __init__(self): self.items = [] def isEmpty(self): return len(self.items) ==

基于Python的汉诺塔算法

首先贴出Python编写的汉诺塔算法的代码: def hanoti(n,x1,x2,x3):    if(n == 1):        print('move:',x1,'-->',x3)        return    hanoti(n-1,x1,x3,x2)    print('move:',x1,'-->',x3)    hanoti(n-1,x2,x1,x3) hanoti(3,'A','B','C') 汉诺塔问题归根结底就是一个循环问题,循环包括两大要素:循环体.循环结束条件 首

python算法之汉诺塔

代码如下: #!/usr/bin/env python # encoding: utf-8 """ @author: 侠之大者kamil @file: 汉诺塔.py @time: 2016/3/20 20:00 """ m = input(">>Please enter a maximum value of the sequence:") m = int(m)+1 def move(a,b,c,n): if n =

汉诺塔 python版

汉诺塔问题:如果将n个盘子(由小到大)从a通过b,搬到c,搬运过程中不能出现小盘子在大盘子下面的情况. 思路分析:假设前要移动第100个盘子,分两步走,移动第99个:再移动第100个:而要移动第99个,同样分两部,移动第98个,再移动第99个,以此类推: if(n>1) { 1.先将A柱上的前n-1个盘子从A借助C移动到B; 2.把A柱子上的第n个盘子直接移动到C: 3.再将B柱子上的n-1个盘子借助A移动到C; } 1 #!/usr/bin/python 2 #encoding=utf-8 3

汉诺塔问题的Python递归实现

汉诺塔问题的python递归实现 学习python遇到的第一个问题:汉诺塔问题的实现.首先是不知道什么是汉诺塔问题,然后是不知道怎么实现.于是百度了下,结果如下: 汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上.并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘 def hanoi(n,x,y,z): i

【Python学习】Python解决汉诺塔问题

参考文章:http://www.cnblogs.com/dmego/p/5965835.html 一句话:学程序不是目的,理解就好:写代码也不是必然,省事最好:拿也好,查也好,解决问题就好! 信息时代不用信息就是罪过,直接抄不加理解与应用,就不是自己的,下次遇到还是不会,或许其中的某一个细节就能够用于各个问题的解决,共勉 学习一个东西总会遇到一些经典的问题,学习Python第二天尝试看一下汉诺塔问题,还是百度,看看解题思路,纯粹是重温初中课堂,越活越回去了 汉诺塔的图解递归算法 一.起源: 汉诺

Python递归实现汉诺塔

Python递归实现汉诺塔: def f3(n,x,y,z): if(n==1): print(x,'--->',z) else: f3(n-1,x,z,y) print(x,'--->',z) f3(n-1,y,x,z) n=int(input('请输入汉罗塔层数:')) f3(n,'X','Y','Z') 运行结果如下: