home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 22 gnu / 22-gnu.zip / BYACC.ZIP / RCS / WARSHALL.C_V < prev   
Text File  |  1992-06-10  |  2KB  |  111 lines

  1. head    1.1;
  2. access;
  3. symbols;
  4. locks; strict;
  5. comment    @ * @;
  6.  
  7.  
  8. 1.1
  9. date    92.06.10.21.55.08;    author downey;    state Exp;
  10. branches;
  11. next    ;
  12.  
  13.  
  14. desc
  15. @@
  16.  
  17.  
  18. 1.1
  19. log
  20. @Initial revision
  21. @
  22. text
  23. @#include "defs.h"
  24.  
  25. transitive_closure(R, n)
  26. unsigned *R;
  27. int n;
  28. {
  29.   register int rowsize;
  30.   register unsigned mask;
  31.   register unsigned *rowj;
  32.   register unsigned *rp;
  33.   register unsigned *rend;
  34.   register unsigned *ccol;
  35.  
  36.   unsigned *relend;
  37.   unsigned *cword;
  38.   unsigned *rowi;
  39.  
  40.   rowsize = ROWSIZE(n);
  41.   relend = (unsigned *) ((unsigned) R + n*rowsize);
  42.  
  43.   cword = R;
  44.   mask = 1;
  45.   rowi = R;
  46.   while (rowi < relend)
  47.     {
  48.       ccol = cword;
  49.       rowj = R;
  50.  
  51.       while (rowj < relend)
  52.     {
  53.       if (*ccol & mask)
  54.         {
  55.           rp = rowi;
  56.           rend = (unsigned *) ((unsigned) rowj + rowsize);
  57.  
  58.           while (rowj < rend)
  59.         *rowj++ |= *rp++;
  60.         }
  61.       else
  62.         {
  63.           rowj = (unsigned *) ((unsigned) rowj + rowsize);
  64.         }
  65.  
  66.       ccol = (unsigned *) ((unsigned) ccol + rowsize);
  67.     }
  68.  
  69.       mask <<= 1;
  70.       if (mask == 0)
  71.     {
  72.       mask = 1;
  73.       cword++;
  74.     }
  75.  
  76.       rowi = (unsigned *) ((unsigned) rowi + rowsize);
  77.     }
  78. }
  79.  
  80. reflexive_transitive_closure(R, n)
  81. unsigned *R;
  82. int n;
  83. {
  84.   register int rowsize;
  85.   register unsigned mask;
  86.   register unsigned *rp;
  87.   register unsigned *relend;
  88.  
  89.   transitive_closure(R, n);
  90.  
  91.   rowsize = ROWSIZE(n);
  92.   relend = (unsigned *) ((unsigned) R + n*rowsize);
  93.  
  94.   mask = 1;
  95.   rp = R;
  96.   while (rp < relend)
  97.     {
  98.       *rp |= mask;
  99.  
  100.       mask <<= 1;
  101.       if (mask == 0)
  102.     {
  103.       mask = 1;
  104.       rp++;
  105.     }
  106.  
  107.       rp = (unsigned *) ((unsigned) rp + rowsize);
  108.     }
  109. }
  110. @
  111.