码迷,mamicode.com
首页 > 编程语言 > 详细

列表形式的汉诺塔(Tower of Hanoi)Python语言实现

时间:2018-06-18 23:49:35      阅读:456      评论:0      收藏:0      [点我收藏+]

标签:AC   昨天   c语言   封装   glob   pytho   else   int   code   

从昨天半下午就开始想这个问题,到现在经过30个小时左右(期间并不思考是非常集中,因为连续思考很累而且可能效果不佳),终于把程序搞定了,第一次思考问题这么久.算是第一个自主思考的程序还是很有成就感的.

代码优势:模块化做的很好,找到了通过写出前4-5次的数学表达,找到了规律并将其化成代码.

代码劣势:规则化欠佳,因python无指针(网上说的,还不确定),没有学到python中类似c语言指针的函数,造成本来一个模块不得不分解为6个模块相互调用.并且函数封装不好,即因为不会类指针方法,所以用函数操作了全局变量.

上代码:

def ac(k):
    global a
    global b
    global c
    if k==2:
        b+=a[-1];a=a[:-1]
        c+=a[-1];a=a[:-1]
        c+=b[-1];b=b[:-1]
    else:
        ab(k-1)     ###############
        c+=a[-1];a=a[:-1]
        bc(k-1)

def ab(k):
    global a
    global b
    global c
    if k==2:
        c+=a[-1];a=a[:-1]
        b+=a[-1];a=a[:-1]
        b+=c[-1];c=c[:-1]
    else:
        ac(k-1)
        b+=a[-1];a=a[:-1]
        cb(k-1)
def cb(k):
    global a
    global b
    global c
    if k==2:
        a+=c[-1];c=c[:-1]
        b+=c[-1];c=c[:-1]
        b+=a[-1];a=a[:-1]
    else:
        ca(k-1)
        b+=c[-1];c=c[:-1]
        ab(k-1)

def ca(k):
    global a
    global b
    global c
    if k==2:
        b+=c[-1];c=c[:-1]
        a+=c[-1];c=c[:-1]
        a+=b[-1];b=b[:-1]
    else:
        cb(k-1)
        a+=c[-1];c=c[:-1]
        ba(k-1)

def ba(k):
    global a
    global b
    global c
    if k==2:
        c+=b[-1];b=b[:-1]
        a+=b[-1];b=b[:-1]
        a+=c[-1];c=c[:-1]
    else:
        bc(k-1)
        a+=b[-1];b=b[:-1]
        ca(k-1)

def bc(k):
    global a
    global b
    global c
    if k==2:
        a+=b[-1];b=b[:-1]
        c+=b[-1];b=b[:-1]
        c+=a[-1];a=a[:-1]
    else:
        ba(k-1)
        c+=b[-1];b=b[:-1]
        ac(k-1)

a=fedcba9876543210
b=‘‘
c=‘‘
ac(len(a))
print(a:{0}\nb:{1}\nc:{2}\n.format(a,b,c))

输出为:

a:
b:
c:fedcba9876543210

 

举一反三:上述代码是字符串形式的汉诺塔,容量有限且处理16个以上元素时表示不方便,后面会写一个列表形式的汉诺塔.

列表形式的汉诺塔(Tower of Hanoi)Python语言实现

标签:AC   昨天   c语言   封装   glob   pytho   else   int   code   

原文地址:https://www.cnblogs.com/zhangziyan/p/9196725.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!