Torre de jogo Hanoi
descrição do jogo
Requisitos: o cumprimento das regras do jogo, os caminhos N da placa de origem para a impressão alvo em movimento
análise
1~N从A移动到B,C作为辅助
等价于:
1、1~N-1从A移动到C,B为辅助
2、把N从A移动到B
3、1~N-1从C移动到B,A为辅助
meu código
public class 汉诺塔游戏 {
/**
* @param args
*/
public static void main(String[] args) {
//一开始C是作为辅助的
printHanoiTower(3,"A","B","C");
}
/**
* 将N个盘子从source移动到target的路径的打印
* @param N 初始的N个从小到大的盘子,N是最大编号
* @param from 原始柱子
* @param help 辅助的柱子
* @param to 目标柱子
*/
private static void printHanoiTower(int N, String from, String to,String help) {
if (N == 1) {
System.out.println("move " + N + " from " + from + " to " + to);
}
// 必须加上else,否则会有问题
else {
// 先把前N-1个盘子移动到辅助空间上去
printHanoiTower(N - 1, from, help, to);
//N可以顺利达到target
System.out.println("move " + N + " from " + from + " to " + to);
// 让N-1从辅助空间回到源空间上去
printHanoiTower(N - 1, help, to, from);
}
}
}
impressão
move 1 from A to B
move 2 from A to C
move 1 from B to C
move 3 from A to B
move 1 from C to A
move 2 from C to B
move 1 from A to B