汉诺塔 :思路直接写在程序中,是对递归的应用,不论原本有多少个圆盘,都将圆盘看成两部分:前n-1个和第n个,这样便于理解,等效于只有两个圆盘的思路。
import java.util.Scanner;
public class HNT {
public static void main(String[] args) {
//定义圆盘的个数
int n = 0;
//三个柱子用A,B,C表示
char a = 'A', b = 'B', c = 'C';
Scanner scanner = new Scanner(System.in);
System.out.println("输入圆盘的个数:");
while (scanner.hasNext()) {
n = scanner.nextInt();
HanNuoTa hanNuoTa = new HanNuoTa();
hanNuoTa.test(n, a, b, c);//调用汉诺塔的方法
System.out.println("输入圆盘的个数:");
}
}
}
class HanNuoTa {
public int count;//记录移动的总次数
public void test(int n, char a, char b, char c) {
if (n == 1) {
//如果只有一个盘,则直接移到C柱,递归的出口
move(1, a, c);
} else {
//先将前n-1个圆盘借助C柱从A移动到B
test(n - 1, a, c, b);
//将剩下的第n个盘移动到C柱
move(n, a, c);
//继续将剩下的n-1个盘从B借助于A移动到C柱
test(n - 1, b, a, c);
}
}
private void move(int i, char a, char c) {
count++;
System.out.println(i + " " + a + "-->" + c + " 共移动" + count + "次");
}
}