Задача

Как использовать метод для решения задачи о Ханойской башне в 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("Диск 1 от " + from + " до " + to);
      } else {
         doTowers(topN - 1, from, to, inter);
         System.out.println("Диск " + topN + " от " + from + " до " + to);
         doTowers(topN - 1, inter, from, to);
      }
   }
}

Результат

Вышеприведенный пример кода даст следующий результат:

Диск 1 от A до C
Диск 2 от A до B
Диск 1 от C до B
Диск 3 от A до C
Диск 1 от B до A
Диск 2 от B до C
Диск 1 от A до 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("Переместить " +n + " из " + startPole + " в " +endPole);
      move(n-1, intermediatePole, endPole);
   } 
   public static void main(String[] args) {
      move(5, 1, 3);
   }
}

Результат

Вышеприведенный пример кода даст следующий результат:

Переместить 1 из 1 в 3
Переместить 2 из 1 в 2
Переместить 1 из 3 в 2
Переместить 3 из 1 в 3
Переместить 1 из 2 в 1
Переместить 2 из 2 в 3
Переместить 1 из 1 в 3
Переместить 4 из 1 в 2
Переместить 1 из 3 в 2
Переместить 2 из 3 в 1
Переместить 1 из 2 в 1
Переместить 3 из 3 в 2
Переместить 1 из 1 в 3
Переместить 2 из 1 в 2
Переместить 1 из 3 в 2
Переместить 5 из 1 в 3
Переместить 1 из 2 в 1
Переместить 2 из 2 в 3
Переместить 1 из 1 в 3
Переместить 3 из 2 в 1
Переместить 1 из 3 в 2
Переместить 2 из 3 в 1
Переместить 1 из 2 в 1
Переместить 4 из 2 в 3
Переместить 1 из 1 в 3
Переместить 2 из 1 в 2
Переместить 1 из 3 в 2
Переместить 3 из 1 в 3
Переместить 1 из 2 в 1
Переместить 2 из 2 в 3
Переместить 1 из 1 в 3

Оглавление