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

  1. #include <stdio.h>
  2. #ifndef lint
  3. static char RCSid[] = "$Header: mkperm.c,v 1.2 87/06/22 14:32:26 kjmcdonell Beta $";
  4. #endif
  5.  
  6. /* undefine rand and srand if you don't have random() from USENET */
  7. #define rand random
  8. #define srand srandom
  9.  
  10. main(argc, argv)
  11. int    argc;
  12. char    *argv[];
  13. {
  14.     int    n;    /* generate a permutation of {1,2,3,...,n} */
  15.     int    i;
  16.     int    t;
  17.     char    *mask;
  18.  
  19.     if (argc > 2 && strcmp(argv[1], "-s") == 0) {
  20.         t = atoi(argv[2]);
  21.         if (t < 16)
  22.             t = 1 << t;
  23.         srand(t);
  24.         argv++;
  25.         argv++;
  26.     }
  27.     n = atoi(argv[1]);
  28.     mask = (char *)malloc(n);
  29.  
  30.     for (i=0; i<n; i++)
  31.         mask[i] = '\0';
  32.     for (i=0; i<n; i++) {
  33.         do {
  34.             t = rand() % n;
  35.         } while (mask[t]);
  36.         mask[t] = '\1';
  37.         printf("%d ", t+1);
  38.     }
  39.     putchar('\n');
  40.     exit(0);
  41. }
  42.