利用栈Stack解决汉诺塔问题

package stack;

import java.util.Stack;

public class MyStack {

    //StackA是源柱,StackB是借助柱,StackC是目的柱
    //move()方法表示把n个在A柱上的移动到C柱
    private static int move(int n, Stack stackA, Stack stackB, Stack stackC) {
        if (n == 1) {
            stackC.push(stackA.pop());
        } else {
            //1.先把n-1个从A柱移动到B柱
            move(n - 1, stackA, stackC, stackB);
            //2.再把A柱上剩下的一个移动到C
            stackC.push(stackA.pop());
            //3.最后把B柱上的n-1个移动到C柱
            move(n - 1, stackB, stackA, stackC);
        }
        //统计一共移动了几次,源柱上有几个就会移动(2的n次方-1)次
        return (1 << n) - 1;
    }

    public static void main(String[] args) {
        Stack<Integer> stackA = new Stack<Integer>();
        Stack<Integer> stackB = new Stack<Integer>();
        Stack<Integer> stackC = new Stack<Integer>();
        for (int i = 1; i <= 5; i++) {
            stackA.push(i);
        }
        System.out.println(stackA.isEmpty());
        System.out.println(stackB.isEmpty());
        System.out.println(stackC.isEmpty());
        for (int i=0;i<stackA.size();i++){
            System.out.println(stackA.elementAt(i));
        }

        System.out.println("=====================");

        System.out.println(move(stackA.size(),stackA,stackB,stackC));
        System.out.println(stackA.isEmpty());
        System.out.println(stackB.isEmpty());
        System.out.println(stackC.isEmpty());

        System.out.println("=====================");
        for (int i=0;i<stackC.size();i++){
            System.out.println(stackC.elementAt(i));
        }
    }
}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值