汉诺塔程序(Java)

211 阅读1分钟

Java 代码:

import java.util.Scanner;

public class Hanoitower {


    // 算法思想:
    // 1、分治算法:分而治之,关键在于怎么分
    // 2、递归

    /**
     * 将 n 个盘子,从 a 经过 b 移动到 c
     *
     * @param n
     * @param a
     * @param b
     * @param c
     */
    private static void hanoi(int n, char a, char b, char c) {
        if (n == 1) {
            // 当只有 1 个盘子的时候,直接从 a 移动到 c,无须经过 b
            move(1, a, c);
            return;
        }

        // 当不止 1 个盘子的时候,分 3 步
        // 1、将 n - 1 个盘子,从 a 经过 c 移动到 b
        hanoi(n - 1, a, c, b);
        // 2、将第 n 个盘子从 a 移动到 c,无须经过 b
        move(n, a, c);
        // 3、将 n - 1 个盘子从 b 经过 a 移动到 c
        hanoi(n - 1, b, a, c);
    }

    private static void move(int num, char from, char to) {
        System.out.println("第 " + num + " 个盘子从 " + from + " 到 " + to);
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入汉诺塔的层数:");

        String input = scanner.next();
        hanoi(Integer.parseInt(input), 'a', 'c', 'b');
    }
}