导航:首页 > 编程语言 > python编写汉诺塔游戏

python编写汉诺塔游戏

发布时间:2024-02-24 12:03:59

python汉诺塔非递归

python汉诺塔非递归,运用list和function知识的解答

无论stack还是recursion都是从汉诺塔的原理去解决问题,但如果已经想清楚汉诺塔的原理,其实只用把答案print出来就行了

先找规律:

一层:A-->C


两层:A-->B

-------

A-->C

-------

B-->C


三层:A-->C

A-->B

C-->B

-------

A-->C

-------

B-->A

B-->C

A-->C


注意到n层汉诺塔有(2**n) - 1 个步骤,而中间的一步(两个分割线之间)都是“A-->C”,中间的这一步将这一层汉诺塔的解分为上下两个部分

仔细观察,上面一部分是将上一层的解中所有的B,C交换,下面一部分是将上一层的解中所有的A,B交换

例如第二层是:

A-->B

A-->C

B-->C

第三层上部分就将第二层的解的C换成B,B换成C,即得出:

A-->C

A-->B

C-->B

第三层下部分就将第二层的解的A换成B,B换成A,即得出:

B-->A

A-->C

C-->B

这个规律同样适用于第一层,和以后的所有层

然后就好办了,代码如图:

代码

其中convertAB,convertBC就是AB交换,BC交换的函数,这两个函数可以自己定义,用中间变量即可

❷ 标题:用Python编码描述汉诺塔步骤

#-*-coding:utf-8-*-
count=0
defhano():

defhanoi(n,x,y,z):
globalcount
count+=1
ifn==1:
print('Monving%d'%n,'from',x,'to',z)
else:
hanoi(n-1,x,z,y)
print('Monving%d'%n,'from',x,'to',z)
hanoi(n-1,y,x,z)
returnhanoi
n=int(input("请输入汉诺塔的层数:"))
hano()(n,'source','helper','target')
print(":",str(count))

-----------分-割-线-是-我----------------

复制分割线以上的代码,保存为hannoi.py,在python 3 下运行,得到结果如题所示。

❸ 汉诺塔python

Solves the Towers of Hanoi problem on n discs. The discs are labeled
* in increasing order of size from 1 to n and the poles are labeled
* A, B, and C.
*
* % java Hanoi 3
* Move disc 1 from A to C
* Move disc 2 from A to B
* Move disc 1 from C to B
* Move disc 3 from A to C
* Move disc 1 from B to A
* Move disc 2 from B to C
* Move disc 1 from A to C
以上为模拟结果,从结果中找递归规律,你的疑点也能得到解决

❹ 哪位大佬有python汉诺塔的教程

学到递归的时候有个汉诺塔的练习,汉诺塔应该是学习计算机递归算法的经典入门案例了,所以本人觉得可以写篇博客来表达一下自己的见解。这markdown编辑器还不怎么会用,可能写的有点格式有点丑啦,各位看官多多见谅.
网上找了一张汉诺塔的图片,汉诺塔就是利用用中间的柱子把最左边的柱子上的圆盘依次从大到小叠上去,说白了就是c要跟原来的a一样

童鞋们理解了汉诺塔的递归算法原理后,可以写个程序来试试,这里只是学到Python的递归所以用了Python,童鞋们可以用其他语言实现,汉诺塔确实能帮助理解递归原理,递归在程序设计中的重要性不言而喻啦!

❺ python语言汉诺塔(hanoi)问题

把每次移动操作 独立出来,写成move操作
然后吧每次移动的逻辑写成hanoi,然后加上重复
hanoi里面执行hanoi、就是递归了

❻ python请用递归算法编程解决汉诺塔问题 在线等

这是Python3系统自带的一个例子,估计就是这个意思,本来他是6个盘子,按照你要求改成4个了。递归算法没问题,描述也非常详细 ;)

#!/usr/bin/envpython3
fromturtleimport*
classDisc(Turtle):
def__init__(self,n):
Turtle.__init__(self,shape="square",visible=False)
self.pu()
self.shapesize(1.5,n*1.5,2)#square-->rectangle
self.fillcolor(n/6.,0,1-n/6.)
self.st()
classTower(list):
"Hanoitower,asubclassofbuilt-intypelist"
def__init__(self,x):
"createanemptytower.xisx-positionofpeg"
self.x=x
defpush(self,d):
d.setx(self.x)
d.sety(-150+34*len(self))
self.append(d)
defpop(self):
d=list.pop(self)
d.sety(150)
returnd
defhanoi(n,from_,with_,to_):
ifn>0:
hanoi(n-1,from_,to_,with_)
to_.push(from_.pop())
hanoi(n-1,with_,from_,to_)
defplay():
onkey(None,"space")
clear()
try:
hanoi(6,t1,t2,t3)
write("pressSTOPbuttontoexit",
align="center",font=("Courier",16,"bold"))
exceptTerminator:
pass#turtledemouserpressedSTOP
defmain():
globalt1,t2,t3
ht();penup();goto(0,-225)#writerturtle
t1=Tower(-250)
t2=Tower(0)
t3=Tower(250)
#maketowerof6discs
foriinrange(4,0,-1):
t1.push(Disc(i))
#preparespartanicuserinterface;-)
write("pressspacebartostartgame",
align="center",font=("Courier",16,"bold"))
onkey(play,"space")
listen()
return"EVENTLOOP"
if__name__=="__main__":
msg=main()
print(msg)
mainloop()

❼ python解决汉诺塔问题

解汉诺塔最简单的做法就是递归:

类似如何将大象装进冰箱:1)将冰箱门打开;2)把大大象放进去;3)把冰箱门关上……

我们将所有的盘都在同一个杆上从大到小排列视为【完美状态】,那么,目标就是将最大盘片为n的完美状态从a杆移到b杆,套用装大象的思路,这个问题同样是三步:

1)把n-1的完美状态移到另一个杆上;

2)把n移到目标杆上;

3)把n-1的完美状态移到目标杆上。

如下:

阅读全文

与python编写汉诺塔游戏相关的资料

热点内容
python计算子网掩码 浏览:57
加密u盘制作成iso镜像 浏览:491
oppo大文件夹图标 浏览:173
用cmd打开python文件 浏览:366
程序员磁盘知识 浏览:584
左搂右抱命令 浏览:931
法律大还是行政命令大 浏览:354
中国银行手机app在哪里刷脸 浏览:900
epidata如何编程 浏览:989
助眠解压玩具电动 浏览:235
4k显示器编程 浏览:267
什么错误在编译时会发现 浏览:700
学会自己解压英语 浏览:44
安卓豪华版是什么意思 浏览:684
c语言编程软件打开 浏览:21
碧蓝航线图片文件夹位置 浏览:671
winme编译 浏览:522
淘宝上买东西发顺丰快递地址都加密吗 浏览:415
批处理编译VS代码 浏览:891
uchar哪个编译器 浏览:28