home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / unix / volume11 / musbus / part03 / hanoi.c < prev    next >
Encoding:
C/C++ Source or Header  |  1987-09-16  |  619 b   |  40 lines

  1. /*
  2.  *  $Header: hanoi.c,v 3.5 87/08/06 08:11:14 kenj Exp $
  3.  */
  4. #define PRINT 0
  5. #define DISK 3
  6. #define other(i,j) (6-(i+j))
  7. int num[4];
  8. long cnt;
  9. main(argc,argv)
  10. char **argv;
  11. {
  12.     int disk;
  13.     disk  = DISK;
  14.     if(argc > 1)disk = atoi(argv[1]);
  15.     num[1] = disk;
  16.     if(PRINT)printf("Start %d on A\n",disk);
  17.     mov(disk,1,3);
  18.     printf("For %d disks, %ld moves\n",disk,cnt);
  19.  
  20.     exit(0);
  21. }
  22.  
  23. mov(n,f,t)
  24. {
  25.     int o;
  26.     if(n == 1) {
  27.         num[f]--;
  28.         num[t]++;
  29.         if(PRINT)printf("Move from %d to %d, result: A:%d B:%d C%d\n",
  30.             f,t,num[1],num[2],num[3]);
  31.         cnt++;
  32.         return;
  33.     }
  34.     o = other(f,t);
  35.     mov(n-1,f,o);
  36.     mov(1,f,t);
  37.     mov(n-1,o,t);
  38.     return;
  39. }
  40.