Java实现汉诺塔移动,只需传一个int值(汉诺塔的阶)

 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 }

 

 

posted @ 2019-05-13 16:59  midnt  阅读(334)  评论(0编辑  收藏  举报