`
lg_asus
  • 浏览: 184366 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

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
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics