3柱子汉诺塔问题解法,请使用回溯算法完成

千杯敬自由 2022-06-05 22:28:18

 实现这个算法可以简单分为三个步骤:

    (1)     把n-1个盘子由A 移到 B;

    (2)     把第n个盘子由 A移到 C;

    (3)     把n-1个盘子由B 移到 C;

从这里入手,在加上上面数学问题解法的分析,我们不难发现,移到的步数必定为奇数步:

    (1)中间的一步是把最大的一个盘子由A移到C上去;

    (2)中间一步之上可以看成把A上n-1个盘子通过借助辅助塔(C塔)移到了B上,

    (3)中间一步之下可以看成把B上n-1个盘子通过借助辅助塔(A塔)移到了C上;

 

用Java代码实现


public class Hanoilmpl {
 
    public static void hanoi(int n, char A, char B, char C) {
        if (n == 1) {
            move(A, C);
        } else {
            hanoi(n - 1, A, C, B);//将n-1个盘子由A经过C移动到B
            move(A, C);             //执行最大盘子n移动
            hanoi(n - 1, B, A, C);//剩下的n-1盘子,由B经过A移动到C
        }
    }
 
    private static void move(char A, char C) {//执行最大盘子n的从A-C的移动
        System.out.println("move:" + A + "--->" + C);
    }
 
    public static void main(String[] args) {
        System.out.println("移动汉诺塔的步骤:");
        hanoi(3, 'a', 'b', 'c');
    }

...全文
387 回复 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

208

社区成员

发帖
与我相关
我的任务
社区描述
一个专注于研究软件新技术的社区
软件工程 高校
社区管理员
  • 勤奋龙
  • 没有一分是自己的
  • Rye758
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧