一、解法思路
一共有64个盘子,把他们从X-->Z
1因为只能大的在下面所以,先通过移动把第64个移动到Z,首先需要把前63个从X-->Y
把前63个从X-->Y,就需要前62个X-->Z,把前62个先当一个整体
然后把第63个从X-->Y
然后接着遍历,把前62个从Z-->Y
2. 然后把第64个从X-->Z
3.然后前63个都到Y上了,第64个已经到Z了,接着就需要把第63个移动到Z上,就和第1,2的步骤一样,只不过1,2步骤是把第64个移动到Z上,还有的区别就是借助的柱子不一样,由此遍历到最后一块结束遍历
二、代码
package p5.分治回溯;
//汉诺塔问题
public class hannuota {
public static void main(String[] args) {
String x="x";
String y="y";
String z="z";
hanoi(3,x,y,z);
}
private static void hanoi(int n, String begin, String mid, String end) {
if (n==1){
System.out.println(begin+"-->"+end);
}else{
hanoi(n-1,begin,end,mid);
System.out.println(begin+"-->"+end);
hanoi(n-1,mid,begin,end);
}
}
}
三、结果