Как работает эта итеративная башня Ханоя? В C [дубликат]
Возможные Дубликаты:
как это работает? Странные башни Ханоя решение
во время серфинга в Google я нашел это интересное решение для Tower of Hanoi, которое даже не использует стек в качестве структуры данных.
это решение приемлемо?
код
#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?
2 ответов
может быть проще увидеть в псевдокоде:
GET NUMBER OF DISKS AS n
WHILE x BETWEEN 1 INCLUSIVE AND 1 LEFT-SHIFTED BY n BITS
SUBTRACT 1 FROM n, DIVIDE BY 3 AND TAKE THE REMAINDER AS A
OR x WITH x-1, ADD 1 TO THAT, DIVIDE BY 3 AND TAKE THE REMAINDER AS B
PRINT "MOVE FROM TOWER " A " TO TOWER " B
ADD 1 TO x
1 левое смещение на n бит в основном равно 2 в степени n, 16 в случае 4 дисков.
Это одно из бинарных решений башни Ханоя, есть подробное объяснение этого алгоритма в Википедии - читать пункт "двоичное решение".