59 lines
638 B
SAS
59 lines
638 B
SAS
/* Store all 92 permutations in a SAS dataset. Translation of Fortran 77 */
|
|
data queens;
|
|
array a{8} p1-p8;
|
|
array s{8};
|
|
array u{30};
|
|
n=8;
|
|
do i=1 to n;
|
|
a(i)=i;
|
|
end;
|
|
do i=1 to 4*n-2;
|
|
u(i)=0;
|
|
end;
|
|
m=0;
|
|
i=1;
|
|
r=2*n-1;
|
|
goto L40;
|
|
L30:
|
|
s(i)=j;
|
|
u(p)=1;
|
|
u(q+r)=1;
|
|
i=i+1;
|
|
L40:
|
|
if i>n then goto L80;
|
|
j=i;
|
|
L50:
|
|
z=a(i);
|
|
y=a(j);
|
|
p=i-y+n;
|
|
q=i+y-1;
|
|
a(i)=y;
|
|
a(j)=z;
|
|
if u(p)=0 and u(q+r)=0 then goto L30;
|
|
L60:
|
|
j=j+1;
|
|
if j<=n then goto L50;
|
|
L70:
|
|
j=j-1;
|
|
if j=i then goto L90;
|
|
z=a(i);
|
|
a(i)=a(j);
|
|
a(j)=z;
|
|
goto L70;
|
|
L80:
|
|
m=m+1;
|
|
output;
|
|
L90:
|
|
i=i-1;
|
|
if i=0 then goto L100;
|
|
p=i-a(i)+n;
|
|
q=i+a(i)-1;
|
|
j=s(i);
|
|
u(p)=0;
|
|
u(q+r)=0;
|
|
goto L60;
|
|
L100:
|
|
put n m;
|
|
keep p1-p8;
|
|
run;
|