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