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 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值