Javaでのハノイの塔の解法


public class TowersOfHanoi {
    public static void solve(int n, char source, char auxiliary, char destination) {
        if (n == 1) {
            System.out.println("Move disk 1 from " + source + " to " + destination);
            return;
        }

        solve(n - 1, source, destination, auxiliary);
        System.out.println("Move disk " + n + " from " + source + " to " + destination);
        solve(n - 1, auxiliary, source, destination);
    }

    public static void main(String[] args) {
        int numDisks = 3; // ハノイの塔のディスクの数
        solve(numDisks, 'A', 'B', 'C');
    }
}

このコードでは、solveメソッドが再帰的に呼び出されます。nはディスクの数を表し、sourceは初期の塔、auxiliaryは補助の塔、destinationは目的の塔を表します。ベースケースとして、ディスクが1枚の場合は直接目的の塔に移動します。それ以外の場合は、再帰的にsolveメソッドを呼び出し、以下の手順でディスクを移動させます。

  1. solve(n - 1, source, destination, auxiliary)を呼び出して、最大のディスクを除いた塔を補助の塔に移動させます。
  2. System.out.println("Move disk " + n + " from " + source + " to " + destination)を使用して、最大のディスクを初期の塔から目的の塔に移動させます。
  3. solve(n - 1, auxiliary, source, destination)を呼び出して、補助の塔に移動させたディスクを目的の塔に移動させます。

この方法で、ハノイの塔の問題を解くことができます。上記のコードでは、3枚のディスクを持つ塔の解を表示していますが、numDisksの値を変更することで、ディスクの数を自由に設定できます。