很高興又能和大家見面了,接下來準備系列更新的是演算法題,一日一練,早日公升仙!
今天的問題是:
實現漢諾塔。 漢諾塔大家肯定已經知道它基本的原理了,我也不加以敘述
那麼今天我們就使用遞迴來實現漢諾塔問題。
void move(int n, char a, char b, char c)
else
}
首先我們需要理解一下漢諾塔移動方法的三個引數的含義:就是塔a借助塔b把n個盤子移動到塔c上面去因為我們是遞迴實現,那麼整個遞迴流程肯定有乙個終點:那就是當移動乙個盤子時我們之久移動過去就可以了
那麼如果不止乙個盤子怎麼辦呢?
很簡單,我們只需要先把前n-1個盤子借助塔c放在塔b上,然後把最後乙個盤子移動到塔c上,
最後再把前n-1個盤子從塔b借助塔a放回到c上就可以啦。
演算法題 漢諾塔
public static void moveplant int size,listfirst,listsecond,listthird 首先將n 1個盤子,從第乙個柱子移動到第二個柱子 moveplant size 1,first,third,second 然後將最後乙個盤子移動到第三個柱子上 t...
演算法之漢諾塔
漢諾塔源於印度乙個古老傳說的益智玩具。相傳大梵天創造世界的時候做了三根金剛石柱子,在一根柱子上從下往上按照大小順序摞著64片 圓盤。大梵天命令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱子上。並且規定,在小圓盤上不能放大圓盤,在三根柱子之間一次只能移動乙個圓盤。現在暫以3個圓盤為例,如下 pa...
演算法題 漢諾塔問題
三個柱子,起初有若干個按大小關係順序安放的盤子,需要全部移動到另外乙個柱子上。移動規則 在小圓盤上不能放大圓盤,在三根柱子之間一次只能移動乙個圓盤。移動次數 f n 2n 1 使用遞迴演算法進行處理。漢諾塔的演算法大概有3個步驟 1 把a上的n 1個盤通過c移動到b。2 把a上的最下面的盤移到c。3...