汉诺塔问题

此题曾让我纠结好久,其实理解他的关键是把三根柱子分别当成来源柱,中转柱和目标柱,这样就很容易理解它的解法了。

public class MyHanoi {

	public static void move(int n,char laiyuan,char zhongzhuan,char mubiao){
		if(n==1){
			//如果只有一根,直接从来源柱移到目标柱
			System.out.println(laiyuan+"-->"+mubiao);
		}else{
			/*想要把N个盘子从来源柱,移到目标柱,需要先把n-1个盘子从来源柱移到中转柱,
			 * 再把第n个盘子移到目标柱,在把n-1个盘子移到目标柱
			 */
			//从来源盘移n-1个盘子到中转盘
			move(n-1,laiyuan,mubiao,zhongzhuan);
			//从来源盘移第n个盘子到目标盘
			System.out.println(laiyuan+"-->"+mubiao);
			//把n-1个盘子从中转盘移到来源盘,此时中转盘作来源盘,原来的来源盘用来中转,目标盘不变
			move(n-1,zhongzhuan,laiyuan,mubiao);
		}
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		char laiyuan='x';//来源柱
		char zhongzhuan='y';//中转柱
		char mubiao='z';//目标柱
		move(64,laiyuan,zhongzhuan,mubiao);
	}

}
 

你可能感兴趣的:(问题)