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.   1 #!/usr/bin/python                                                           
  2.   2
  3.   3 def hanio(x, y, z, n):
  4.   4     if n == 1:
  5.   5         print x, '->', z
  6.   6     else:
  7.   7         hanio(x, z, y, n - 1)
  8.   8         print x, '->', z
  9.   9         hanio(y, x, z, n - 1)
  10. 10
  11. 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