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 }