Java數據構造及算法實例:漢諾塔成績 Hanoi。本站提示廣大學習愛好者:(Java數據構造及算法實例:漢諾塔成績 Hanoi)文章只能為提供參考,不一定能成為您想要的結果。以下是Java數據構造及算法實例:漢諾塔成績 Hanoi正文
/**
* 漢諾塔年夜學的時刻就學過,然則基本沒弄明確,獨一曉得的就是要用遞歸的辦法來求解。
* 成績描寫:
* 有三根桿子A,B,C。A桿上有N個(N>1)穿孔圓盤,盤的尺寸由下到上順次變小。
* 請求按以下規矩將一切圓盤移至C桿:
* 1.每次只能挪動一個圓盤;
* 2.年夜盤不克不及疊在小盤下面。
* 提醒:可將圓盤暫時置於B桿,也可將從A桿移出的圓盤從新移回A桿,
* 但都必需尊循上述兩條規矩。
* 問:若何移?起碼要挪動若干次?
* 處理辦法:
* 假定只要2個盤子,柱子分離是A, B, C柱。那末只須要三步便可以把他們從A柱移到C柱,
* 這三步是A->B, A->C, B->C。
* 假如盤子數n跨越2呢,我們便可以把這些盤子算作由最上面的誰人盤子和 下面n-1個盤子 兩部門,
* 這兩部門異樣可以用下面的三步完成挪動。
* 也就是說我們可以經由過程遞歸地挪用下面的步調完成將一切n個盤子從A柱挪動到C柱。
*/
package al;
public class Hanoi {
public static void main(String[] args) {
Hanoi hanoi = new Hanoi();
hanoi.move(3, 'A', 'B', 'C');
}
/**
* @author
* @param n 盤子數量
* @param from 肇端柱子
* @param temp 中央柱子
* @param to 目的柱子
*/
public void move(int n, char from, char temp, char to) {
if(n == 1) {
System.out.println("Move 1 plate from " + from + " to " + to);
} else {
move(n-1, from, to, temp);
move(1, from, temp, to);
move(n-1, temp, from, to);
}
}
}