1 public class HNT {
2 public static void main(String[] args) {
3 HNT a1 = new HNT();
4 a1.lToR(10); //给汉诺塔a1左边放10阶的层数,把左边的10阶移动至右边。
5 }
6 private boolean pHToM(int num,String a,String b,String c) { //打印移动数据,从a移动到c.
7 if (num == 1) { //只移动一层的情况,return false表示,如果num == 1则不再继续打印num<1的情况
8 System.out.printf("%s to %s\n",a,c);
9 return false;
10 }
11 else if (num == 2) { //只移动两层的情况,return false表示,如果num == 2则不再继续打印num<2的情况
12 System.out.printf("%s to %s\n",a,b);
13 System.out.printf("%s to %s\n",a,c);
14 System.out.printf("%s to %s\n",b,c);
15 return false;
16 }
17 else { //
18 return true; //移动大于两层的情况,return true表示,如果num>2则继续循环到num<=2为止
19 }
20 }
21 public void lToR(int num) { //把num层的汉诺塔从左移动至右
22 if(pHToM(num,"left","mid","right")) {
23 lToM(num - 1);
24 lToR(1);
25 mToR(num - 1);
26 }
27 }
28 public void lToM(int num) { //把num层的汉诺塔从左移动至中
29 if(pHToM(num,"left","right","mid")) {
30 lToR(num - 1);
31 lToM(1);
32 rToM(num - 1);
33 }
34 }
35 public void mToL(int num) { //把num层的汉诺塔从中移动至左
36 if(pHToM(num,"mid","right","left")) {
37 mToR(num - 1);
38 mToL(1);
39 rToL(num - 1);
40 }
41 }
42 public void mToR(int num) { //把num层的汉诺塔从中移动至右
43 if(pHToM(num,"mid","left","right")) {
44 mToL(num - 1);
45 mToR(1);
46 lToR(num - 1);
47 }
48 }
49 public void rToL(int num) { //把num层的汉诺塔从右移动至左
50 if(pHToM(num,"right","mid","left")) {
51 rToM(num - 1);
52 rToL(1);
53 mToL(num - 1);
54 }
55 }
56 public void rToM(int num) { //把num层的汉诺塔从右移动至中
57 if(pHToM(num,"right","left","mid")){
58 rToL(num - 1);
59 rToM(1);
60 lToM(num - 1);
61 }
62 }
63 }