汉诺塔问题

有三根相邻的柱子,标号为A,B,C,

A柱子上从下到上按金字塔状叠放着n个不同大小的圆盘,

现在把所有盘子一个一个移动到柱子B上,

并且每次移动同一根柱子上都不能出现大盘子在小盘子上方 (如下图)


汉诺塔游戏

设N个盘子

1.把N-1个盘子 从 A柱借助 B柱移到C柱

2.把第N个盘子 移动到B柱

3.把N-1个盘子 从 C柱借助 A柱移到B柱

public static void main(String[] args) {

printHanoiTower(3, "A", "B", "C");

}

/**

*

* @param N 初始N个从小到大的盘子

* @param from 原始柱子 A

* @param to 目标柱子 B

* @param help 辅助柱子 C

*/

static void printHanoiTower(int N, String from, String to, String help) {

if(N == 1) {

System.out.println("move"+N+"from"+from+"to"+to);

return;

}

printHanoiTower(N-1, from, help, to);//N-1个盘子移动到辅助柱子上

System.out.println("move"+N+"from"+from+"to"+to);//第N个到达目标柱子

printHanoiTower(N-1, help, to, from);//N-1个盘子借助A从C移动到目标柱子

}

你可能感兴趣的:(汉诺塔问题)