参考までに, 与えられた手数からハノイの塔の状態を復元する C 言語のプログラムを 以下に記しておく. それを hanoi2.c というファイルに保存してコンパイルすれば, n 段のハノイの塔の m 手目の状態を出力するプログラムが得られる. 例えば, 10 段のハノイの塔の 1000 手目が知りたければ, コマンド・ラインから
このプログラムは 16 段までのハノイの塔にしか対応していない. プログラムに関心のある読者は, 64 段のハノイの塔に対応するように, 改造を試みてほしい.
#include〈stdio.h〉
void main(argc, argv)
int argc;
char *argv[];
{
int n, m, i, j, k, l, mask, tmp;
if(argc < 3)
exit(0);
n = atoi(argv[1]);
m = atoi(argv[2]);
i = 1;
j = 2;
k = 3;
mask = ((0xffff >> n) << n);
if(m & mask)
{
printf("%d 手目は存在しません.\n", m);
return;
}
mask = (0x0001 << (n-1));
for(l = n; l > 0; l --)
{
if(m & mask)
{
printf("板 %d は棒 %d に
あります.\n",l,j);
tmp = i;
i = k;
k = tmp;
}
else
{
printf("板 %d は棒 %d に
あります.\n",l,i);
tmp = j;
j = k;
k = tmp;
}
m = (m << 1);
}
}