home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Power-Programmierung
/
CD1.mdf
/
modula2
/
library
/
modula1
/
queens8.mod
< prev
next >
Wrap
Text File
|
1987-06-11
|
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.