Java 示例 - 解决河内塔
-
问题描述
如何使用方法解决河内塔问题? -
解决方案
这个例子展示了使用方法解决河内塔问题的方法(3 个磁盘)。public class MainClass { public static void main(String[] args) { int nDisks = 3; doTowers(nDisks, 'A', 'B', 'C'); } public static void doTowers(int topN, char from, char inter, char to) { if (topN == 1) { System.out.println("Disk 1 from " + from + " to " + to); } else { doTowers(topN - 1, from, to, inter); System.out.println("Disk " + topN + " from " + from + " to " + to); doTowers(topN - 1, inter, from, to); } } }
-
结果
上面的代码示例将产生以下结果。Disk 1 from A to C Disk 2 from A to B Disk 1 from C to B Disk 3 from A to C Disk 1 from B to A Disk 2 from B to C Disk 1 from A to C
以下是河内塔的另一个示例public class TowersOfHanoi { public static void move(int n, int startPole, int endPole) { if (n == 0) { return; } int intermediatePole = 6 - startPole - endPole; move(n-1, startPole, intermediatePole); System.out.println("Move " +n + " from " + startPole + " to " +endPole); move(n-1, intermediatePole, endPole); } public static void main(String[] args) { move(5, 1, 3); } }
上面的代码示例将产生以下结果。Move 1 from 1 to 3 Move 2 from 1 to 2 Move 1 from 3 to 2 Move 3 from 1 to 3 Move 1 from 2 to 1 Move 2 from 2 to 3 Move 1 from 1 to 3 Move 4 from 1 to 2 Move 1 from 3 to 2 Move 2 from 3 to 1 Move 1 from 2 to 1 Move 3 from 3 to 2 Move 1 from 1 to 3 Move 2 from 1 to 2 Move 1 from 3 to 2 Move 5 from 1 to 3 Move 1 from 2 to 1 Move 2 from 2 to 3 Move 1 from 1 to 3 Move 3 from 2 to 1 Move 1 from 3 to 2 Move 2 from 3 to 1 Move 1 from 2 to 1 Move 4 from 2 to 3 Move 1 from 1 to 3 Move 2 from 1 to 2 Move 1 from 3 to 2 Move 3 from 1 to 3 Move 1 from 2 to 1 Move 2 from 2 to 3 Move 1 from 1 to 3