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
メソッドを呼び出し、以下の手順でディスクを移動させます。
solve(n - 1, source, destination, auxiliary)
を呼び出して、最大のディスクを除いた塔を補助の塔に移動させます。System.out.println("Move disk " + n + " from " + source + " to " + destination)
を使用して、最大のディスクを初期の塔から目的の塔に移動させます。solve(n - 1, auxiliary, source, destination)
を呼び出して、補助の塔に移動させたディスクを目的の塔に移動させます。
この方法で、ハノイの塔の問題を解くことができます。上記のコードでは、3枚のディスクを持つ塔の解を表示していますが、numDisks
の値を変更することで、ディスクの数を自由に設定できます。