1. 程式人生 > >java C201_07_07漢諾塔問題 c語言 c++

java C201_07_07漢諾塔問題 c語言 c++

漢諾塔問題的描述如下:有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