問題:漢諾塔
如題,通過審題,可以得出如下規則:
1.一共只有三根柱子a、b、c
2.需要將a柱子上的圓盤原樣移動到b、c其中一根柱子上,也就是從下往上從大到小排列
3.每次移動只能移動乙個圓盤
4.不要真去按此規則移動64個圓盤(skr)
so!how to do?
這邊我學到了乙個新的看問題的思想,也就是將乙個大問題分解成一大一小兩個問題,如下,
這裡一共有n個盤子:
1.將n-1個圓盤從a移動到c,再移動到b ps:其中有很複雜的移動軌跡,但是我不去管
2.再將n個圓盤從a移動到c
3.最後將n-1個圓盤從b移動到a,再移動到c ps:其中有很複雜的移動軌跡,但是我不去管
4.重複上述過程
ok,其實就是將問題看成第n個圓盤和n-1個圓盤的移動軌跡問題,再去迭代。
用**實現如下:
# 漢諾塔問題
'''n:圓盤個數
a,b,c:對應a,b,c三個柱子
'''def hanoi(n,a,b,c):
if n>0:
hanoi(n-1,a,c,b)
print('第%d個盤 moving from %s to %s' %(n,a,c))
hanoi(n-1,b,a,c)
pass
hanoi(3,'a','b','c')
然後我帶入7個盤子就已經迭代了好多次了,如果想判斷**的正確性,可以用2、3個盤子迭代觀察,另外
建議大家不要真的用64帶入去讓電腦計算,不然世界毀滅(記憶體爆了)我可不管,skr!
學習於2020/11/26 21:44,感謝b站up主路飛it學城提供。
漢諾塔演算法
最簡步驟 2的n次冪 1 為了實現 n個盤從 借助c 從a 移動到 b 思路如下 首先考慮極限當只有乙個盤的時候 只要 盤直接從 a b即可 那麼當有2個盤的時候就只要先把1號盤從a c 然後 把2號盤 a b 再 把 2好盤從 c b 那麼當有n個盤的時候你只要先把 n 1個 盤 借助 b 移動到...
漢諾塔演算法
解法 如果柱子標為abc,要由a搬至c,在只有乙個盤子時,就將它直接搬至c,當有兩個盤子,就將b當作輔助柱。如果 盤數超過兩個,將第三個以下的盤子遮起來,就很簡單了,每次處理兩個盤子,也就是 a b,a c,b c這三個 步驟,而被遮住的部分,其實就是進入程式的遞迴處理。事實上,若有n個盤子,則先移...
漢諾塔演算法
乙個印度傳說 在乙個神廟裡有有乙個漢諾塔,就是乙個銅板上插著3個寶石針,其中一根針從上到下的穿著由小到大的銅片64片,僧人們一次只能移動乙個銅片,並且不論移到哪個針上,必須保持小片在大片上面。僧侶們預言,當所有的銅片都從穿好的那根針上移到另外一根針上時,世界就將在一聲霹靂中消亡。當然,這只是個傳說,...