java C201_07_07漢諾塔問題 c語言 c++
阿新 • • 發佈:2019-02-08
漢諾塔問題的描述如下:有A、B和C 3跟柱子,在A上從下往上按照從小到大的順序放著64個圓盤,以B為中介,把盤子全部移動到C上。移動過程中,要求任意盤子的下面要麼沒有盤子,要麼只能有比它大的盤子。本例項將演示如何求解3階漢諾塔問題。
package _07_第七章常見演算法; import java.util.Scanner; public class C201_07_07漢諾塔問題 { public static void main(String[] args) { //移動n個盤子從A到C //1.移動n-1個盤子 藉助C 從 A到 B //2.把第n個盤子 從A直接到 C //3.把n-1 把B 藉助A 移動到 C. System.out.printf("請輸入盤子的數量:"); Scanner scan = new Scanner(System.in); int n = scan.nextInt(); //將n個盤子 從A柱 藉助B 移動到C hanoi(n,'A','B','C'); } /** * 移動n個盤子 * @param n 盤子數 * @param a 源柱 * @param b 輔助柱 * @param c 目標柱 */ private static void hanoi(int n, char a, char b, char c) { if (1 == n){ System.out.printf("%c -> %c\n",a,c); }else { hanoi(n-1,a,c,b); System.out.printf("%c -> %c\n",a,c); hanoi(n-1,b,a,c); } } }
請輸入盤子的數量:3
A -> C
A -> B
C -> B
A -> C
B -> A
B -> C
A -> C
請輸入盤子的數量:4
A -> B
A -> C
B -> C
A -> B
C -> A
C -> B
A -> B
A -> C
B -> C
B -> A
C -> A
B -> C
A -> B
A -> C
B -> C