Copyright (C) $B#I#O#IF|K\0Q0w2q(B 1995.$B!!(BAll rights reserved.
$B!!K\Ld$G$O!"D9$5(B m $B$N%S%C%HNs$N$&$A!"$A$g$&$I(B n $B8D$N(B 1 $B$r4^(B
$B$_!";D$j$N%S%C%H$O$9$Y$F(B 0 $B$G$"$k$h$&$J$b$N$r!"$b$l$J$/@8@.$9(B
$B$k$3$H$r5a$a$F$$$k!#(B
$B2<5-$NNc2r$O!"%Q%9%+%k$N;[email protected]!$rCio$KB?$/$N
JOI$B%[!<%`%Z!<%8(B$B$XLa$k(B
JOI'95$B$XLa$k(B
C$B%W%m%0%i%`(B(1)
bitSEQ c_next(bitSEQ c_old, int m, int n)
{
bitSEQ c_new;
if (c_old & bit[m-1]) {
if (n==1) c_new = 0;
else {
c_new = c_next(c_old^bit[m-1],m-1,n-1);
c_new = !c_new ? 0 : bit[m-1] | c_new;
}
}
else {
if (n==1) c_new = c_old<<1;
else {
c_new = c_next(c_old,m-1,n);
if (!c_new) c_new = c_first(n-1) | bit[m-1];
}
}
return c_new;
}
BASIC$B%W%m%0%i%`(B(1)
FUNCTION cNext (cOld AS LONG, m AS INTEGER, n AS INTEGER)
IF FNcAnd(cOld, cBit(m)) <> 0 THEN
IF n = 1 THEN
cNew = 0
ELSE
cNew = cNext(cOld - cBit(m), m - 1, n - 1)
IF cNew > 0 THEN cNew = cNew + cBit(m)
END IF
ELSE
IF n = 1 THEN
cNew = 2 * cOld
ELSE
cNew = cNext(cOld, m - 1, n)
IF cNew = 0 THEN cNew = cFirst(n - 1) + cBit(m)
END IF
END IF
cNext = cNew
END FUNCTION
Pascal$B%W%m%0%i%`(B(1)
function c_next(c_old:bit_seq; m,n:integer):bit_seq;
var c_new:bit_seq;
begin
if (c_old and bit[m]) <> 0 then begin
if n=1 then c_new:=0
else begin
c_new:=c_next(c_old xor bit[m],m-1,n-1);
if c_new<>0 then c_new := c_new or bit[m];
end;
end
else begin
if n=1 then c_new := c_old shl 1
else begin
c_new:=c_next(c_old,m-1,n);
if c_new=0 then c_new := c_first(n-1) or bit[m];
end;
end;
c_next:=c_new;
end;