|
|
1.1 ! root 1: /* ! 2: * Copyright (c) 1989 The Regents of the University of California. ! 3: * All rights reserved. ! 4: * ! 5: * This code is derived from software contributed to Berkeley by ! 6: * Robert Paul Corbett. ! 7: * ! 8: * Redistribution and use in source and binary forms are permitted provided ! 9: * that: (1) source distributions retain this entire copyright notice and ! 10: * comment, and (2) distributions including binaries display the following ! 11: * acknowledgement: ``This product includes software developed by the ! 12: * University of California, Berkeley and its contributors'' in the ! 13: * documentation or other materials provided with the distribution and in ! 14: * all advertising materials mentioning features or use of this software. ! 15: * Neither the name of the University nor the names of its contributors may ! 16: * be used to endorse or promote products derived from this software without ! 17: * specific prior written permission. ! 18: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED ! 19: * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF ! 20: * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ! 21: */ ! 22: ! 23: #ifndef lint ! 24: static char sccsid[] = "@(#)warshall.c 5.3 (Berkeley) 6/1/90"; ! 25: #endif /* not lint */ ! 26: ! 27: #include "defs.h" ! 28: ! 29: transitive_closure(R, n) ! 30: unsigned *R; ! 31: int n; ! 32: { ! 33: register int rowsize; ! 34: register unsigned mask; ! 35: register unsigned *rowj; ! 36: register unsigned *rp; ! 37: register unsigned *rend; ! 38: register unsigned *ccol; ! 39: register unsigned *relend; ! 40: register unsigned *cword; ! 41: register unsigned *rowi; ! 42: ! 43: rowsize = WORDSIZE(n); ! 44: relend = R + n*rowsize; ! 45: ! 46: cword = R; ! 47: mask = 1; ! 48: rowi = R; ! 49: while (rowi < relend) ! 50: { ! 51: ccol = cword; ! 52: rowj = R; ! 53: ! 54: while (rowj < relend) ! 55: { ! 56: if (*ccol & mask) ! 57: { ! 58: rp = rowi; ! 59: rend = rowj + rowsize; ! 60: while (rowj < rend) ! 61: *rowj++ |= *rp++; ! 62: } ! 63: else ! 64: { ! 65: rowj += rowsize; ! 66: } ! 67: ! 68: ccol += rowsize; ! 69: } ! 70: ! 71: mask <<= 1; ! 72: if (mask == 0) ! 73: { ! 74: mask = 1; ! 75: cword++; ! 76: } ! 77: ! 78: rowi += rowsize; ! 79: } ! 80: } ! 81: ! 82: reflexive_transitive_closure(R, n) ! 83: unsigned *R; ! 84: int n; ! 85: { ! 86: register int rowsize; ! 87: register unsigned mask; ! 88: register unsigned *rp; ! 89: register unsigned *relend; ! 90: ! 91: transitive_closure(R, n); ! 92: ! 93: rowsize = WORDSIZE(n); ! 94: relend = R + n*rowsize; ! 95: ! 96: mask = 1; ! 97: rp = R; ! 98: while (rp < relend) ! 99: { ! 100: *rp |= mask; ! 101: mask <<= 1; ! 102: if (mask == 0) ! 103: { ! 104: mask = 1; ! 105: rp++; ! 106: } ! 107: ! 108: rp += rowsize; ! 109: } ! 110: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.