题目名称:汉诺塔
有三个立柱A、B、C。A柱上穿有大小不等的圆盘N个,较大的圆盘在下,较小的圆盘在上。要求把A柱上的圆盘全部移到C柱上,保持大盘在下、小盘在上的规律(可借助B柱)。每次移动只能把一个柱子最上面的圆盘移到另一个柱子的最上面。请输出移动过程。
输入描述:
输入一个整数n
输出描述:
输出移动过程
输入样例:
3
输出样例:
a->c
a->b
c->b
a->c
b->a
b->c
a->c
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
//System.out.println("请输入盘数n:");
int n= sc.nextInt();
hanoi( n,'a','b','c');
}
/**
* 传入n个盘子,编号为1到n,按照汉诺r塔的规则,从目标A盘子移动到C,B是辅助盘子
* @param nDisks
* @param A
* @param B
* @param C
*/
public static void hanoi(int nDisks,char A,char B,char C){
if (nDisks==1){ //当只有一个盘子时,直接一步到位,把盘子从A移动到C
move(nDisks,A,C);
return;
}
hanoi(nDisks-1,A,C,B);//当n>=2时,步骤1,先把最上面的一大堆n-1个小盘子从A移动到B
move(nDisks,A,C);//步骤2,此时A上就剩下第你n个大盘子,只需要把它从A移动到C
hanoi(nDisks-1,B,A,C);//步骤3,此时需要将B上的n-1个小盘子从B移动到C
}
/**
* 将编号为n的盘子从starPoint移动到targetPoint
* @param nDisks
* @param sourceTower
* @param destTower
*/
private static void move(int nDisks,char sourceTower,char destTower) {
//System.out.println("编号为"+nDisks+"的盘子正在从"+sourceTower+"移动到"+destTower);
System.out.println(sourceTower+"->"+destTower);
}
}
转载