python求解漢諾塔游戲
本文實(shí)例為大家分享了python求解漢諾塔游戲的具體代碼,供大家參考,具體內(nèi)容如下
一、問(wèn)題定義
百度百科定義:漢諾塔(又稱(chēng)河內(nèi)塔)問(wèn)題是源于印度一個(gè)古老傳說(shuō)的益智玩具。據(jù)說(shuō)大梵天創(chuàng)造世界的時(shí)候做了三根金剛石柱子,在一根柱子上從下往上按照從小到大順序摞著64片黃金圓盤(pán)。大梵天命令婆羅門(mén)借助其中一根柱子,把64片黃金圓盤(pán)重新擺放到第三個(gè)根柱子上。并且規(guī)定,在小黃金圓盤(pán)上不能放大的黃金圓盤(pán),在三根柱子之間一次只能移動(dòng)一個(gè)圓盤(pán)。
例如,如果黃金圓盤(pán)只有3片,則為了滿(mǎn)足游戲規(guī)則,那么必須按照如下圖所示的8個(gè)步驟完成:
二、代碼實(shí)現(xiàn)
# 將n個(gè)盤(pán)子借助y柱從x柱移動(dòng)到z柱def hanoi(n, x, y, z): count = 0 if n == 1: # 遞歸出口 print(x, ’ --> ’, z) return 1 else: # 將前n - 1個(gè)盤(pán)子借助z柱從x柱移動(dòng)到y(tǒng)柱上 count += hanoi(n - 1, x, z, y) # 遞歸調(diào)用 # 將最底下的1個(gè)盤(pán)子從x柱移動(dòng)到z柱上 count += hanoi(1, x, y, z) # 將n - 1個(gè)盤(pán)子借助x柱從y柱移動(dòng)到z柱上 count += hanoi(n - 1, y, x, z) # 遞歸調(diào)用 return countdef main(): hanoi_level = input('請(qǐng)輸入漢諾塔層數(shù):') print('總共移動(dòng)次數(shù)為%d' % hanoi(int(hanoi_level), ’X’, ’Y’, ’Z’))if __name__ == ’__main__’: main()
當(dāng)黃金圓盤(pán)為4層時(shí),代碼的輸出結(jié)果為:
請(qǐng)輸入漢諾塔層數(shù):4X --> YX --> ZY --> ZX --> YZ --> XZ --> YX --> YX --> ZY --> ZY --> XZ --> XY --> ZX --> YX --> ZY --> Z總共移動(dòng)次數(shù)為15
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。
相關(guān)文章:
1. python實(shí)現(xiàn)讀取類(lèi)別頻數(shù)數(shù)據(jù)畫(huà)水平條形圖案例2. python中PyQuery庫(kù)用法分享3. python操作數(shù)據(jù)庫(kù)獲取結(jié)果之fetchone和fetchall的區(qū)別說(shuō)明4. php使用正則驗(yàn)證密碼字段的復(fù)雜強(qiáng)度原理詳細(xì)講解 原創(chuàng)5. ASP.NET MVC前臺(tái)動(dòng)態(tài)添加文本框并在后臺(tái)使用FormCollection接收值6. php5.6不能擴(kuò)展redis.so的解決方法7. AJAX實(shí)現(xiàn)數(shù)據(jù)的增刪改查操作詳解【java后臺(tái)】8. 關(guān)于HTML5的img標(biāo)簽9. CSS3實(shí)現(xiàn)動(dòng)態(tài)翻牌效果 仿百度貼吧3D翻牌一次動(dòng)畫(huà)特效10. python 爬取嗶哩嗶哩up主信息和投稿視頻
