题目
有三根杆子A,B,C。A杆上有 N 个 (N>1) 穿孔圆盘,盘的尺寸由下到上依次变小。要求按下列规则将所有圆盘移至 C 杆:
- 每次只能移动一个圆盘
- 大盘不能叠在小盘上面
思路
-
只有一个圆盘时,直接将A中的圆盘放置于C
-
底盘保持不移,所以是n-1,移动3个盘,实际移动2个盘
-
多个圆盘时(2个为例),先将A中的第一个圆盘放置于C,第二个圆盘放置于B
-
当A没有多个圆盘且每个圆盘都占有B和C杆位置时,利用每次只能移动一个圆盘,大盘不能叠在小盘上面的信息,重新逆序排列,以3个圆盘各占A、B、C杆为例
- 摆放顺序则为:B、A、C
- 摆放顺序则为:B、A、C
递归实现
package com.test.hanoi;
import org.junit.Test;
/**
* @author lorem
*
*/
public class Hanoi {
@Test
public void test(){
String A = "A";
String B = "B";
String C = "C";
hanoiStep(3,A,B,C);
}
public void hanoiStep(int n,String A,String B,String C){
if (n == 1){
mv(A,C);
return;
}else{
hanoiStep(n-1,A,C,B);
mv(A,C);
hanoiStep(n-1,B,A,C);
}
}
public void mv(String A,String C){
System.out.println(A+"->"+C);
}
}