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 つのステップに分割することです。

  1. n-1枚の円盤を棒Aから棒Bに移動する(補助の棒Cを使用)
  2. n番目の皿をAからCの柱へ移動する
  3. Bのn-1枚の円盤をCに移す(補助柱としてAを使用)。

ハノイの塔の問題を解くには、hanoi関数を再帰的に呼び出して、この3つの手順を繰り返せばよい。

bannerAds