可能重复:
How does this work? Weird Towers of Hanoi Solution河内迭代塔如何工作? ç
虽然谷歌冲浪,我发现这个有趣的解决方案,以汉诺塔它甚至没有用到堆栈数据结构。
有人可以简单地解释我,它究竟在做什么?
这个解决方案真的可以接受吗?
代码
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n, x;
printf("How many disks?\n");
scanf("%d", &n);
printf("\n");
for (x=1; x < (1 << n); x++)
printf("move from tower %i to tower %i.\n",
(x&x-1)%3, ((x|x-1)+1)%3);
return 0;
}
更新:什么是硬编码数字3在这里干什么?
它使用标准的3根棒。 – 2010-05-20 02:42:25
它报告正确的移动顺序吗?如果是这样,它就会起作用,而且没有理由不接受它。但是,在提供它作为家庭作业的解决方案之前,您需要了解它,否则,如果您被要求解释它,您将会遇到麻烦,因为它可能与正常情况非常不同。 – 2010-05-20 02:44:28
这不是我的作业。我只是意外地发现了这个算法,并且想知道它是如何工作的。 – TCM 2010-05-20 02:48:42