谁能帮忙改一改汉诺塔问题的python 代码 ?
时间:2011-02-11
来源:互联网
class hanotower:
def __init__(self):
self.start=[]
self.end=[]
self.tmp=[]
#self.last=[]
self.flag='N'
def fill(self,n):
self.start=list(range(n,0,-1))
self.end=[]
self.tmp=[]
self.flag='Y'
def get_state(self):
trans=[]
length=max(len(self.start),len(self.tmp),len(self.end))
def coalesce(aList,i):
if i<0 or i>=len(aList) or len(aList)==0 :return '0'
else:return str(aList[i])
for i in range(length-1,-1,-1):
seg=[coalesce(self.start,i),coalesce(self.tmp,i),coalesce(self.end,i)]
trans=trans+[seg]
return trans
def print_state(self):
print('--------------------------------------------------------')
for sub in self.get_state():
print('\t'+sub[0]+'\t'+sub[1]+'\t'+sub[2])
print('--------------------------------------------------------')
def move(self,k,s,d,t):
self.print_state()
if k==1 :
self.print_state()
d.append(s.pop())
else:
self.print_state()
move(k-1,s,t,d)
self.print_state()
d.append(s.pop())
self.print_state()
move(k-1,t,d,s)
self.print_state()
def start_to_end(self):
if self.flag=='N' :
self.fill(5)
else:
self.print_state()
self.move(len(self.start),self.start,self.end,self.tmp)
self.print_state()
def main():
h=hanotower()
h.fill(5)
print('begin')
#h.print_state()
h.start_to_end()
print('end')
#h.print_state()
if __name__=='__main__':
main()
学习写的汉诺塔的问题,但是得不到正确的结果 ,而且能否指点一下使 代码具有 python 的特点。
谢谢!
def __init__(self):
self.start=[]
self.end=[]
self.tmp=[]
#self.last=[]
self.flag='N'
def fill(self,n):
self.start=list(range(n,0,-1))
self.end=[]
self.tmp=[]
self.flag='Y'
def get_state(self):
trans=[]
length=max(len(self.start),len(self.tmp),len(self.end))
def coalesce(aList,i):
if i<0 or i>=len(aList) or len(aList)==0 :return '0'
else:return str(aList[i])
for i in range(length-1,-1,-1):
seg=[coalesce(self.start,i),coalesce(self.tmp,i),coalesce(self.end,i)]
trans=trans+[seg]
return trans
def print_state(self):
print('--------------------------------------------------------')
for sub in self.get_state():
print('\t'+sub[0]+'\t'+sub[1]+'\t'+sub[2])
print('--------------------------------------------------------')
def move(self,k,s,d,t):
self.print_state()
if k==1 :
self.print_state()
d.append(s.pop())
else:
self.print_state()
move(k-1,s,t,d)
self.print_state()
d.append(s.pop())
self.print_state()
move(k-1,t,d,s)
self.print_state()
def start_to_end(self):
if self.flag=='N' :
self.fill(5)
else:
self.print_state()
self.move(len(self.start),self.start,self.end,self.tmp)
self.print_state()
def main():
h=hanotower()
h.fill(5)
print('begin')
#h.print_state()
h.start_to_end()
print('end')
#h.print_state()
if __name__=='__main__':
main()
学习写的汉诺塔的问题,但是得不到正确的结果 ,而且能否指点一下使 代码具有 python 的特点。
谢谢!
作者: leeshasr 发布时间: 2011-02-11
有点晕啊。
作者: 2gua 发布时间: 2011-02-11
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28