演算法之漢諾塔

2021-09-05 00:27:32 字數 1030 閱讀 4762

漢諾塔源於印度乙個古老傳說的益智玩具。

相傳大梵天創造世界的時候做了三根金剛石柱子,在一根柱子上從下往上按照大小順序摞著64片**圓盤。大梵天命令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱子上。並且規定,在小圓盤上不能放大圓盤,在三根柱子之間一次只能移動乙個圓盤。

現在暫以3個圓盤為例,**如下:

package com.itszt.test8;

/** * 漢諾塔

* @author 李章勇

*/public class test2

//擬訂共計n個圓盤,要將第n個圓盤置於左側的柱子上,

//就要先將前n-1個圓盤移到右側柱子上

move(n-1,!left);

if(left)else

//第n個圓盤移到目標柱子上時,剩下的n-1個圓盤必然在另一根柱子上需要遞迴移動

move(n-1,!left);

}public static void main(string args)

}

上述**執行結果如下:

step1-->  1-->left

step2-->  2-->right

step3-->  1-->left

step4-->  3-->left

step5-->  1-->left

step6-->  2-->right

step7-->  1-->left

也就是說,3個圓盤的話,累計需移動7次,即(2³-1=7),如果是64個圓盤,則需要移動((2^64)-1)次,如果按照每秒移動一次,約需5800億年才能移動完畢。

漢諾塔合集之漢諾塔3

漢諾塔3 步驟分析 1.當只有乙個圓盤時,要從a到b再到c 2.同樣擴充套件經典漢諾塔問題來看,先把a柱上 n 1 個圓盤,經b移動到c 3.把最後乙個圓盤從a移動到b 4.把c柱上的 n 1 個圓盤,經b移動 移回 到a 5.把b上的最後乙個圓盤從b移到c 6.最後把a上的 n 1 個圓盤經過b移...

漢諾塔演算法

最簡步驟 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個盤子,則先移...