C言語でハノイの塔問題を解くにはどうすればよいか
ハノイの塔問題を解く代表的な手法として、再起があります。以下はC言語で再起を使ってハノイの塔問題を解くサンプルコードです。
#include <stdio.h>
void hanoi(int n, char from_rod, char to_rod, char aux_rod) {
if (n == 1) {
printf("Move disk 1 from rod %c to rod %c\n", from_rod, to_rod);
return;
}
hanoi(n-1, from_rod, aux_rod, to_rod);
printf("Move disk %d from rod %c to rod %c\n", n, from_rod, to_rod);
hanoi(n-1, aux_rod, to_rod, from_rod);
}
int main() {
int n = 3; // 设置汉诺塔的盘子数量
hanoi(n, 'A', 'C', 'B');
return 0;
}
上記のコードを実行すると、円盤を移動させる手順が表示されます。この例では、3 つの円盤が A スタック上にあり、それらをすべて C スタックに移動する必要があります。補助スタックは B です。
この再帰ソリューションの考え方は、問題を 3 つのステップに分割することです。
- n-1枚の円盤を棒Aから棒Bに移動する(補助の棒Cを使用)
- n番目の皿をAからCの柱へ移動する
- Bのn-1枚の円盤をCに移す(補助柱としてAを使用)。
ハノイの塔の問題を解くには、hanoi関数を再帰的に呼び出して、この3つの手順を繰り返せばよい。