- 論壇徽章:
- 0
|
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 的特點。
謝謝! |
|