首页 > 代码库 > 汉诺塔问题

汉诺塔问题

/**
 * 汉诺塔问题
 * TODO	有A、B和C3根柱子,在A上从下往上按照从小到大的顺序放着64个圆盘
 * 以B为中介,把盘子全部移动到C上。
 * 移动过程中,要求任意盘子的下面要么没有盘子,要么只能有比它大的盘子
 */
public class HanniTower {

	public static void moveDish(int level,char from,char inter,char to){
		//如果只有1个盘子,退出迭代
		if (level == 1) {
			System.out.println("从 "+from+" 移动盘子 1号到"+to);
		}else {
			moveDish(level-1, from, to, inter);
			System.out.println("从 "+from+" 移动盘子到"+level+"号到"+to);
			moveDish(level-1, inter, from, to);
		}
	}
	
	public static void main(String[] args) {
		int disks = 5;
		moveDish(disks, ‘A‘, ‘B‘, ‘C‘);
	}
	/**
	 * 实现原理解析:
	 * 为了将N个盘子从A移动到C,需要先将第N个盘子上面的N-1个盘子移动到B上,
	 * 这样才能将第N个盘子移动到C上.
	 * 同理,为了将第N-1个盘子从B移动到C上,需要将N-2个盘子移动到A上,这样
	 * 才能将第N-1个盘子移动到C上.
	 */
}


本文出自 “IT菜鸟” 博客,请务必保留此出处http://mazongfei.blog.51cto.com/3174958/1907836

汉诺塔问题