Chinaunix
标题:
谁能帮忙改一改汉诺塔问题的python 代码 ?
[打印本页]
作者:
leeshasr
时间:
2011-02-11 18:57
标题:
谁能帮忙改一改汉诺塔问题的python 代码 ?
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 的特点。
谢谢!
作者:
2gua
时间:
2011-02-11 22:13
有点晕啊。
作者:
longdeqidao
时间:
2013-09-01 21:59
1 #!/usr/bin/python
2
3 def hanio(x, y, z, n):
4 if n == 1:
5 print x, '->', z
6 else:
7 hanio(x, z, y, n - 1)
8 print x, '->', z
9 hanio(y, x, z, n - 1)
10
11 hanio('A', 'B', 'C', 3)
复制代码
这是我写的递归的, LZ可能写的是非递归的。那个太复杂了
作者:
pitonas
时间:
2013-09-02 14:39
longdeqidao 发表于 2013-09-01 14:59
这是我写的递归的, LZ可能写的是非递归的。那个太复杂了
有点牛啊。蛮牛。
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2