python堆栈汉诺塔非递归_汉诺塔问题的递归解法和非递归解法(python语言实现)...
汉诺塔问题的非递归解法(python语言类解法)
#!/usr/bin/env python
#coding:utf-8
import sys
import time
reload(sys)
sys.setdefaultencoding('utf-8')
class Mycolumns(object):
val=0
#__slots__ = ['plates','name']
def __init__(self,name='',plates_num=0):
self.name = name
self.plates = []
if plates_num > 0 :
for i in range(0,plates_num):
self.plates.append(n-i)
@staticmethod
def fun():
Mycolumns.val +=1
print"this is the %d th time to move" %(Mycolumns.val)
【这段可以用类方法代替】
【
@classmethod
def fun(cls):
cls.val +=1
print"this is the %d th time to move" %(cls.val)
】
def initialize(n):
stack = []
mycolumn1 = Mycolumns('A',n)
if n%2 == 0:
mycolumn2 = Mycolumns('B')
mycolumn3 = Mycolumns('C')
index = 2
else:
mycolumn2 = Mycolumns('C')
mycolumn3 = Mycolumns('B')
index = 1
stack.append(mycolumn1)
stack.append(mycolumn2)
stack.append(mycolumn3)
return stack,index
def nowcolumn(i,stack):
for item in stack:
if i in item.plates:
return item
def nextcolumn(i,stack):
for item in stack:
if i in item.plates:
if i%2!=0:
next = (stack.index(item)+1)%3
else:
next = (stack.index(item)+2)%3
#print "%d next column is %s"%(i,stack[next].name)
return stack[next]
def move(nowcolumn,nextcolumn):
n = nowcolumn.plates.pop()
nextcolumn.plates.append(n)
print "move plate %d from %s to %s" %(n,nowcolumn.name,nextcolumn.name)
Mycolumns.fun()
def hannuoyi(n):
stack,index = initialize(n)
#max = pow(2,n)-1
#k =0
#while(k
FINAL = []
for i in range(0,n):
FINAL.append(n-i)
while(stack[index].plates!=FINAL):
for i in range(1,n+1):
#print "i value is %d" %(i)
if(nowcolumn(i,stack).plates.index(i)==len(nowcolumn(i,stack).plates)-1 and (nextcolumn(i,stack).plates==[] or i< nextcolumn(i,stack).plates[-1])):
move(nowcolumn(i,stack),nextcolumn(i,stack))
#k = k+1
else:
pass
#print"can not move plate %d" %(i)
print stack[0].plates,stack[0].name
print stack[1].plates,stack[1].name
print stack[2].plates,stack[2].name
if __name__=="__main__":
n=3
hannuoyi(n)
2. 汉诺塔问题的非递归解法(python语言过程式解法)
#!/usr/bin/env python
#coding:utf-8
import sys
import time
reload(sys)
sys.setdefaultencoding('utf-8')
global a
a =0
def fun():
global a
a = a+1
print"this is the %d th time to move" %(a)
def nowcolumn(i,stackA,stackB,stackC):
if i in stackA:
return stackA
elif i in stackB:
return stackB
else:
return stackC
def nextcolumn(n,i,stackA,stackB,stackC):
if n%2==0:
if i in stackA:
if i%2!=0:
newcolumn = stackB
else:
newcolumn = stackC
if i in stackB:
if i%2!=0:
newcolumn = stackC
else:
newcolumn = stackA
if i in stackC:
if i%2!=0:
newcolumn = stackA
else:
newcolumn = stackB
else:
if i in stackA:
if i%2==0:
newcolumn = stackB
else:
newcolumn = stackC
if i in stackB:
if i%2==0:
newcolumn = stackC
else:
newcolumn = stackA
if i in stackC:
if i%2==0:
newcolumn = stackA
else:
newcolumn = stackB
return newcolumn
def move(nowcolumn,nextcolumn):
n = nowcolumn.pop()
nextcolumn.append(n)
print "move plate %d" %(n)
fun()
def hannuoyi(n):
stackA = []
stackB = []
stackC = []
FINAL = []
for i in range(0,n):
stackA.append(n-i)
FINAL.append(n-i)
print stackA,stackB,stackC,FINAL
while(stackC!=FINAL):
for i in range(1,n+1):
print "i value is %d" %(i)
if(nowcolumn(i,stackA,stackB,stackC).index(i)==len(nowcolumn(i,stackA,stackB,stackC))-1 and (nextcolumn(n,i,stackA,stackB,stackC)==[] or i< nextcolumn(n,i,stackA,stackB,stackC)[-1])):
move(nowcolumn(i,stackA,stackB,stackC),nextcolumn(n,i,stackA,stackB,stackC))
else:
print"can not move plate %d" %(i)
print stackA,stackB,stackC
if __name__=="__main__":
n=6
hannuoyi(n)
汉诺塔问题的递归解法(python语言)
#!/usr/bin/env python
#coding:utf-8
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
global a
a =0
def fun():
global a
a = a+1
def hannuoyi(n,A,B,C):
if n==1:
move(1,A,C)
else:
hannuoyi(n-1,A,C,B)
move(n,A,C)
hannuoyi(n-1,B,A,C)
def move(n,tempA,tempB):
print "move plate %d from column %s to column %s" %(n,tempA,tempB)
fun()
if __name__=="__main__":
hannuoyi(3,'A','B','C')
print "total:we need %d steps"%(a)
python堆栈汉诺塔非递归_汉诺塔问题的递归解法和非递归解法(python语言实现)...相关推荐
- 盖塔机器人好_[转载]盖塔机器人的十大谜团
近来适逢盖塔皇帝第一次推出超合金玩具,又勾起了我多年来埋藏在心底里的盖塔魂,这篇博文也是我念念不忘想写下来的文章之一,是自娱自乐性质关于盖塔之谜的解读,如能有缘得到同好拜读请一定不惜留言交流! 先声明 ...
- python 无法引入同级目录的方法_再见 virtualenv!K神教你轻松管理多个Python环境...
点击上方"菜鸟学Python",选择"星标"公众号 超级无敌干货第一时间推给你!!! 小编电脑上有多个 Python 开发环境,每次都是用 virtualenv ...
- python递归汉诺塔详解_汉诺塔在python中递归,理解磁盘目的地的变化
我正在努力提高我对python中hanoi之塔递归解决方案代码的理解. 此代码:def moveTower(height,fromPole, toPole, withPole): if height ...
- python递归详解+汉诺塔小案例_汉诺塔,python递归实现解法步骤
def hanoi(n,x,y,z):#函数实现n个盘子在x,y,z,移动 if n==1: print(x, ' --> ', z) else: hanoi(n-1,x,z,y)#将n-1层个 ...
- 二叉树层序遍历递归与非递归_二叉树基础(1)-构建和遍历(递归和非递归)...
二叉树的构建有2种方式:1.直接输入数字.2.根据两种顺序来判断另外一中顺序(后面会提到) 这里分享第一种构建方式,二叉树的前中后三种遍历方式(递归和非递归版本),和二叉树的层次遍历. 见代码demo ...
- python setattr无限递归_如何避免使用setattr和属性setter来避免递归循环?
在调用setattr时,当试图设置某个带有setter的属性的值时,这将导致无限递归循环:class TypeSystem(object): def __setattr__(self, key, va ...
- java 什么时候用递归_如果要用Java实现算法,一定慎用递归
现象 : 递归是我们很经典的一种算法实现,可以很好的描述一个算法的原理!对于算法的描述.表现和代码结构理解上,递归都是不错的选择! 但是本文想说的是java实现一个递归算法的时候尽量不要用递归实现,而 ...
- python摄像头识别快递单号查询_免费对接快递鸟api单号识别查询接口(python)
由于自己网站需要对接一些物流查询快递,然后在网上搜了一圈发现快递鸟比较适合我 之前写快递api的时候,官网上只有php和.net的示例,而我使用python封装的相关功能踩了许多坑,才搞出来,分享一下 ...
- python手写多个字母识别_一个带界面的CNN手写数字识别,使用Python(tensorflow, kivy)实现...
CNN_Handwritten_Digit_Recognizer (CNN手写数字识别) A CNN handwritten digit recognizer with graphical UI, i ...
最新文章
- 右键助手1.0正式版
- laravel数据迁移的时候遇到的字符串长度的问题
- 经典C语言程序100例之二四
- hive 中某个字段等于0_快速了解hive
- Links about 技术大牛Joseph Yiu ...姚文祥(Joseph Yiu)
- 最多只能选择两个多选框的jQuery功能实现
- 深度学习推荐模型-DIN
- samba和nfs的自动挂载
- Java进阶:The driver is automatically registered via the SPI and manual loading of the driver class is
- 思科网院Packet Tracer实验(七)IP编址
- PAT之树:一般树、二叉树、完全二叉树、二叉搜索树、二叉平衡树、并查集
- TCP协议以及TCP的三次握手和四次挥手
- 华为性格测试通关指南
- MapGIS出现“存储服务错误,可能未启动”问题解决方案
- GIS实验之根据建筑物走向和方向角进行区域划分
- 闭关之 Vulkan 应用开发指南笔记(四):绘制、几何体片段处理、同步和回读数据
- linux signal用法,Linux 信号 signal 用法详解及注意事项
- libxml使用实例
- 计算机文化基础期末考试复习
- Linux系统下如果查看用户的UID和GID
热门文章
- epoll浅析以及nio中的Selector
- 进程和线程(4)-进程 vs. 线程
- zabbix 服务器监控之数据库操作
- edit box小技巧
- 转:LoadRunner检查点使用小结
- [转载] 民兵葛二蛋——第31集
- [转载] python可视化分析(matplotlib、seaborn、ggplot2)
- [转载] python实现堆排序用类的方法_python实现堆排序的实例讲解
- 新增字段属性“是否转义”,提高列表展示性能
- Response JSON数据返回