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); } } }