python 实现汉诺塔问题】的更多相关文章

python 游戏 —— 汉诺塔(Hanoita) 一.汉诺塔问题 1. 问题来源 问题源于印度的一个古老传说,大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上.并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘. 2. 问题阐述 塔内有三个座A.B.C,A座上有64个盘子,盘子从上到下逐渐变大,最下面的盘子最大.目前要把A座的64个盘子从A座移到C座,并且每次只能移动一…
今天刚刚在博客园安家,不知道写点什么,前两天刚刚学习完python 所以就用python写了一下汉诺塔算法,感觉还行拿出来分享一下 首先看一下描述: from :http://baike.baidu.com/link?url=fzJdDuawFsjvlLi8vjCMepByo79au3MMyu50GpMN89oj3CzEa00k5giNeuehTfQM 汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金…
参考文章:http://www.cnblogs.com/dmego/p/5965835.html   一句话:学程序不是目的,理解就好:写代码也不是必然,省事最好:拿也好,查也好,解决问题就好!   信息时代不用信息就是罪过,直接抄不加理解与应用,就不是自己的,下次遇到还是不会,或许其中的某一个细节就能够用于各个问题的解决,共勉   学习一个东西总会遇到一些经典的问题,学习Python第二天尝试看一下汉诺塔问题,还是百度,看看解题思路,纯粹是重温初中课堂,越活越回去了    汉诺塔的图解递归算法…
学习Python已经有一段时间了,也学习了递归的方法,而能够实践该方法的当然就是汉诺塔问题了,但是这次我们不只是要完成对汉诺塔过程的计算,还要通过turtle库来体现汉诺塔中每一层移动的过程. 一.设计一个类(Class) 类(Class):用来描述具有相同的属性和方法的对象的集合.它定义了该集合中每个对象所共有的属性和方法.对象是类的实例. 下面是此程序需用到的类(Class)代码: class Stack: def __init__(self): self.items = [] def is…
汉诺塔的传说 法国数学家爱德华·卢卡斯曾编写过一个印度的古老传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针.印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的64片金片,这就是所谓的汉诺塔.不论白天黑夜,总有一个僧侣在按照下面的法则移动这些金片:一次只移动一片,不管在哪根针上,小片必须在大片上面.僧侣们预言,当所有的金片都从梵天穿好的那根针上移到另外一根针上时,世界就将在一声霹雳中消灭,而梵塔.庙宇和众生也都将同归于尽. 不管这个传说的可信度有…
汉诺塔问题是一个经典的问题.汉诺塔(Hanoi Tower),又称河内塔,源于印度一个古老传说.大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上.并且规定,任何时候,在小圆盘上都不能放大圆盘,且在三根柱子之间一次只能移动一个圆盘.问应该如何操作? 使用python递归函数可以实现 move.py def move(n, a, b, c): if n == 1: print(a, '-->'…
汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘. 大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上.并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘 python实现如下: #汉诺塔 def move (n,a,b,c,d=1): if n == 1: print(a,'-->',c) return d d=d+move(n-1,a,c,b) #怎么吧…
经典递归算法汉诺塔分析: 当A柱子只有1个盘子,直接A --> C 当A柱子上有3个盘子,A上第一个盘子 --> B, A上最后一个盘子 --> C, B上所有盘子(1个) --> C 当A柱子上有那个盘子,A上n-1个盘子 --> B,A上最后一个盘子 --> C, B上所有盘子(n-1个)--> C 规律: 当有1个盘子时,A(1) --> C 当有n个盘子时,A(n-1)--> B, A(1)--> C, B(n-1) --> C d…
汉诺塔问题 汉诺塔是根据一个传说形成的一个问题.汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上.并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘. 思路 设hanoi(a, b, c, n)表示从A移动n个盘到C.那么要实现这个操作,首先要把A上面的n-1个盘移动到B,再把最大的第n个盘直接从A移动到C,然后把…
汉诺塔问题可以简单描述成为将a柱子上的圆盘按一定规则借助b柱子完美地复制到c柱子上.现假设有a,b,c三根柱子,a柱子上的圆盘从上到下依次标号为1,2,3,……,n,且为递增状态.规则:每次移动一个盘子,且只能让小的放在大的上面.目标:移动到c柱子上,与原来a上的状态相同. 算法步骤:(1)将a上的除最下面一个盘子以外的n-1的圆盘借助c柱子移动到b柱子上. (2)将a上剩下的圆盘(即最下面的圆盘)移动到c柱子上. (3)将b上的刚才一过来的n-1个圆盘再借助a柱子移动到c上去. (4)任务完成…
有三根柱子一次为A,B,C 现在A柱子上有3个块,按照汉诺塔规则移动到C柱子上去,打印步骤? 我们这样理解:A为原始柱,C为目标柱,B为缓冲柱 1.定义一个函数move(n,a,b,c),n为原始柱上面的块数,a为原始柱名称,b为缓冲柱,c为目标柱 def move(n,a,b,c): pass 2.首先,我们假定原始柱上只有一个块,那就是直接从原始柱移动到目标柱,无需经过缓冲柱 def move(n,a,b,c): if n == 1: print(a,'-->',c) else: pass…
代码如下: def hano(n,x,y,z): if n==1: print(x,"->",z) else: #将n-1个盘子从x->y hano(n-1,x,z,y) #将剩余的最后一个盘子从x->z print(x,"->",z) #将剩余的n-1个盘子从y->z hano(n-1,y,x,z) n = int(input("请输入汉诺塔的层数:")) hano(n,"A","B&…
汉诺塔问题   初始状态: 思考:当盘子的个数是3的时候,大家写出移动顺序 移动的步骤: 3个盘子,从a到c 1.前面两个盘子,从a到b 1)把前面一个盘子,从a到c a->c 2)把第二个盘子,从a到b a->b 3)把c上的盘子,从c到b c->b 2.最后一个盘子,从a到c a->c 3.把b上的两个盘子,从b到c 1)把前面一个盘子,从b到a b->a 2)把第二个盘子,从b到c b->c 3)把a上的盘子,从a到c a->c 总结: n个盘子,从a到c…
# 汉诺塔思想笔记# 认识汉诺塔的目标:把A柱子上的N个盘子移动到C柱子# 递归的思想就是把这个目标分解成三个子目标# 子目标1:将前n-1个盘子从a移动到b上# 子目标2:将最底下的最后一个盘子从a移动到c上# 子目标3:将b上的n-1个盘子移动到c上# 然后每个子目标又是一次独立的汉诺塔游戏,也就可以继续分解目标直到N为1def move(n, a, b, c): if n == 1: print(a, '-->', c) else: move(n-1, a, c, b)# 子目标1 mov…
汉诺塔 算法分析 1.步骤1:如果是一个盘子,直接将a柱子上的盘子从a移动到c 否则 2.步骤2:先将A柱子上的n-1个盘子借助C移动到B(图1) 已知函数形参为hanoi(n,a,b,c),这里调用函数的时候是A柱子上的n-1个,A借助C移动到B,所以调用函数hanoi(n-1,a,c,b) 3.步骤3:此时移动完如图1,但是还没有移动结束,首先要将A柱子上最后一个盘子直接移动到C(图2),调用函数hanoi(1,a,b,c) 4.步骤4:最后将B柱子上的n-1个盘子借助A移动到C(图3),调…
# 汉诺塔 a = "A" b = "B" c = "C" def hano(a, b, c, n): if n == 1: print("{} --> {}".format(a, c)) if n == 2: print("{} --> {}".format(a, c)) print("{} --> {}".format(a, b)) print("{} -…
一.用动画实现汉诺塔问题: 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(): re…
def hanoi(n, A, B, C): if n > 0: hanoi(n-1, A, C, B) print("%s->%s" % (A, C)) hanoi(n-1, B, A, C) hanoi(4, 'A', 'B', 'C')…
#hanoi.py count = 0 def hanoi(n, src, dst, mid): #src为原1号柱子 dst 目标3号柱子 mid中间2号过渡柱子 global count #对全局变量count的引用 if n == 1: print("{}:{}->{}".format(1,src,dst)) count += 1 else : hanoi(n-1, src, mid, dst) print("{}:{}->{}".format(n…
# -*- coding: utf-8 -*- def move(n, a, b, c): if n==1: print(a,'==>',c)#只有一块的时候直接从A到C即可 else: move(n-1,a,c,b)#把n-1块从a先移到B print(a,'==>',c)#把第n块先从a先到c move(n-1,b,a,c)#再把原来从a移到B上的n-1块,从B移到c, # 期待输出: # A --> C # A --> B # C --> B # A --> C…
1.汉诺塔 汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上.并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘. 2.算法介绍 当盘子的个数为n时,移动的次数应等于2^n – 1 后来一位美国学者发现一种出人意料的简单方法,只要轮流进行两步操作就可以了.首先把三根柱子按顺序排成品字型,把所有的圆盘按从大到小的顺序…
刚开始看python实现汉诺塔,自己想了很久才想明白,在这里记录一下,希望以后忘记能够立马记起. n=1时,可以直接a->c n=2时,可以借助b然后将a->c n=3时,可以将最上面的那两个作为一个整体先移动到b,然后把最下面的移动到c,再把上面两个移动到c,那上面两个具体怎么移动呢,不就是n=2的时候那样子移动吗?只不过这时候上面两个的目标就是b,所以需要借助c移动到b,再移动完最下面的那时候,目标就又变为了从b移动到c,而需要借助的是a. 再往上就同理,始终将最底下的上面作为一个整体,这…
代码如下: #!/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 =…
汉诺塔问题:如果将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; } #!/usr/bin/python #encoding=utf-8 def h…
# -*- coding: utf-8 -*- #汉诺塔移动问题 # 定义move(n,a,b,c)函数,接受参数n,表示3个柱子A.B.C中第1个柱子A的盘子数量 # 然后打印出把所有盘子从A借助B移动到C的方法 def move(n,a,b,c): if n==1: print('move', a, '-->', c) else: move(n-1,a,c,b) move(1,a,b,c) move(n-1,b,a,c) move(5,'A','B','C') #计算移动步数 def f(n…
汉诺塔问题不管在任何编程语言里都是经典问题,是采用递归算法的经典案例,该问题可以抽象如下: 一 .3根圆柱A,B,C,其中A上面串了n个圆盘 二 .这些圆盘从上到下是按从小到大顺序排列的,大的圆盘任何时刻不得位于小的圆盘上面 三 .每次移动一个圆盘,最终实现将所有圆盘移动到C上 利用Python语言接近自然语言的特性,开发者可以更容易的将递归算法翻译成程序语句,需要的代码量很小.汉诺塔问题的解决步骤用语言描述很简单,仅三步: A,B,C三个圆柱,分别为初始位,过渡位,目标位,设A柱为初始位,C位…
python运用turtle 画出汉诺塔搬运过程 1.打开 IDLE 点击File-New File 新建立一个py文件 2.向py文件中输入如下代码 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 po…
一.问题背景 汉诺塔问题是源于印度一个古老传说. 源于印度一个古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上.并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘. 简单来说目的就是要我们把盘子按照规则从A移到C 二.思路 此处我用递归的思想理解汉诺塔问题.递归的思想容易理解,但是运用在代码上的算法并不是解决汉诺塔问题的最佳算法. 我们初定有n个盘子,…
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') 运行结果如下:…
1.简介 古代有一座汉诺塔,塔内有3个座A.B.C,A座上有n个盘子,盘子大小不等,大的在下,小的在上,如图所示.有一个和尚想把这n个盘子从A座移到C座,但每次只能移动一个盘子,并且自移动过程中,3个座上的盘子始终保持大盘在下,小盘在上.在移动过程中可以利用B座来放盘子. 2.解决方法 解法的基本思想是递归.假设有 A.B.C 三个塔,A 塔有  块盘,目标是把这些盘全部移到 C 塔.那么先把 A 塔顶部的  块盘移动到 B 塔,再把 A 塔剩下的大盘移到 C,最后把 B 塔的  块盘移到 C.…