HanoiTower解决思想


public static void main(String...args){
HanoiTower hanoi = new HanoiTower();
hanoi.move("A","B","C",new int[]{3,2,1});
}

private void move(String A, String B, String C,int[] n){
if(n.length == 0){
return ;
}else{
this.move(A, C, B, Arrays.copyOfRange(n, 1, n.length));
System.out.println(n[0]+"从"+A+"移到"+C);
this.move(B, A, C, Arrays.copyOfRange(n, 1, n.length));
}
}



解题思想:把多个圆盘看成两部分,其中上面的N-1个可以看作是一个整体,那么首先将上面的N-1个移到B柱,然后将最后一个移到C柱,然后把上面的N-1个移到C柱。
那么上面的N-1个是怎么从A柱移到B柱的呢,同样的道理把上面的N-2个看作是一个整体,从B柱移到A柱,将N-1中的最下面那个从B柱移到C柱, N-2怎么从B柱移到到A柱,可以依此类推。

如果N为偶数,那第一次应该将最小盘移到B柱,然后把第二小盘移到C柱
如果N为奇数,那第一次应该将最小盘移到C柱,然后把第二小盘移到B柱

移动次数:S1 =1。。。Sn = 2Sn-1 +1 这样可算出移到次数是2^n-1
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值