home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ftp.barnyard.co.uk
/
2015.02.ftp.barnyard.co.uk.tar
/
ftp.barnyard.co.uk
/
cpm
/
walnut-creek-CDROM
/
CPM
/
LANGUAGS
/
MODULA2
/
QUEENS8.MOD
< prev
next >
Wrap
Text File
|
2000-06-30
|
1KB
|
61 lines
(* Find all settings of 8 queens on an 8x8 chess board such
that no queen checks another queen.
[see also, Comm. ACM 14, 4, 221-27 (April 74)]. *)
MODULE queens;
FROM InOut IMPORT Write, WriteLn, WriteInt;
VAR i: INTEGER;
a: ARRAY [1..8] OF BOOLEAN;
b: ARRAY [2..16] OF BOOLEAN;
c: ARRAY [-7..7] OF BOOLEAN;
x: ARRAY [1..8] OF INTEGER;
safe: BOOLEAN;
PROCEDURE print;
VAR k: INTEGER;
BEGIN
Write(' ');
FOR k:= 1 TO 8 DO WriteInt(x[k],2) END;
WriteLn
END print;
PROCEDURE trycol(j: INTEGER);
VAR i: INTEGER;
PROCEDURE setqueen;
BEGIN
a[i] := FALSE;
b[i+j] := FALSE;
c[i-j] := FALSE
END setqueen;
PROCEDURE removequeen;
BEGIN
a[i] := TRUE;
b[i+j] := TRUE;
c[i-j] := TRUE
END removequeen;
BEGIN
i := 0;
REPEAT
INC(i);
safe := a[i] AND b[i+j] AND c[i-j];
IF safe THEN
setqueen;
x[j] := i;
IF j < 8 THEN trycol(j+1) ELSE print END;
removequeen
END
UNTIL i = 8
END trycol;
BEGIN
FOR i := 1 TO 8 DO a[i] := TRUE END;
FOR i := 2 TO 16 DO b[i] := TRUE END;
FOR i := -7 TO 7 DO c[i] := TRUE END;
trycol(1)
END queens.