home *** CD-ROM | disk | FTP | other *** search
/ Fish 'n' More 2 / fishmore-publicdomainlibraryvol.ii1991xetec.iso / fish / misc_utils / yacc_419 / src / rcs / warshall.c,v < prev   
Text File  |  1990-07-14  |  1KB  |  110 lines

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