ViP.at - Iterative Türme von Hanoi
Zur Abwechslung einmal eine iterative Version der Türme von Hanoi.
void Hanoi(int numberOfDisks, int startPeg, int endPeg)
{
int moves=(1<<numberOfDisks)-1, step=1, z, o;
startPeg--;
endPeg--;
if(!(numberOfDisks&1))
endPeg=3-startPeg-endPeg;
if((3+endPeg-startPeg)%3==1)
step++;
while(moves--) {
for(z=moves, o=0; z&1; o++, z>>=1);
if(o&1)
printf("Move from peg %d to peg %d\n", endPeg+1, startPeg+1);
else
printf("Move from peg %d to peg %d\n", startPeg+1, endPeg+1);
startPeg = (startPeg + step)%3;
endPeg = (endPeg + step)%3;
}
}
(I assume peg numbers range from 1 to 3, hence the startPeg-- and
startPeg+1 etc...)
--------------------------------------------------------------------------
Marcus Comstedt Lysator Academic Computer Society
marcus@lysator.liu.se Linko"ping University, Sweden
--------------------------------------------------------------------------
![]()
Design by comdes