免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 6291 | 回复: 3
打印 上一主题 下一主题

谁能帮忙改一改汉诺塔问题的python 代码 ? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-02-11 18:57 |只看该作者 |倒序浏览
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 的特点。
谢谢!

论坛徽章:
0
2 [报告]
发表于 2011-02-11 22:13 |只看该作者
有点晕啊。

论坛徽章:
0
3 [报告]
发表于 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可能写的是非递归的。那个太复杂了

论坛徽章:
5
丑牛
日期:2014-01-21 08:26:26卯兔
日期:2014-03-11 06:37:43天秤座
日期:2014-03-25 08:52:52寅虎
日期:2014-04-19 11:39:48午马
日期:2014-08-06 03:56:58
4 [报告]
发表于 2013-09-02 14:39 |只看该作者
longdeqidao 发表于 2013-09-01 14:59
这是我写的递归的, LZ可能写的是非递归的。那个太复杂了

有点牛啊。蛮牛。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP