汉诺塔问题

来源:互联网 发布:ubuntu安装numpy 编辑:程序博客网 时间:2024/06/08 09:23
import java.util.Scanner;public class TowersOfHanoi {    private static int m = 0;// 标记移动次数    // 实现移动的函数    public static void move(int disks, char N, char M) {        System.out.println("第" + (++m) + " 次移动 : " + " 把 " + disks + " 号圆盘从 "                + N + " ->移到->  " + M);    }    /**     * 汉诺塔问题——递归实现     *     * @param n——圆盘个数     * @param A——起始塔     * @param B——辅助塔     * @param C——目标塔     */    public static void hanoi(int n, char A, char B, char C) {        // 圆盘个数为1时,直接将其从A塔移动到C塔        if (n == 1)            TowersOfHanoi.move(1, A, C);// 将编号为1的圆盘从A移到C        // 圆盘个数大于1时,递归求解        else {            hanoi(n - 1, A, C, B);// 递归,把A塔上编号1~n-1的圆盘移到B上,以C为辅助塔            TowersOfHanoi.move(n, A, C);// 把A塔上编号为n的圆盘移到C上            hanoi(n - 1, B, A, C);// 递归,把B塔上编号1~n-1的圆盘移到C上,以A为辅助塔        }    }    public static void main(String[] args) {        Scanner input = new Scanner(System.in);        char A = 'A';        char B = 'B';        char C = 'C';        System.out.println("***********************************************************");        System.out.println("汉诺塔问题——将A塔上编号从小到大的圆盘从A塔通过B辅助塔移动到C塔上");        System.out.println("***********************************************************");        System.out.print("请输入圆盘的个数:");        int disks = input.nextInt();        TowersOfHanoi.hanoi(disks, A, B, C);        System.out.println(">>共移动 " + m + " 次,将A上的圆盘都移动到C上");        input.close();    }}
原创粉丝点击