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
--------------------------------------------------------------------------

© 1995 by Thomas Dorn
Design by comdes