BSD 1 development
[unix-history] / tests / eightqueens.p
CommitLineData
fde98a2d
BJ
1program eightqueens(output);
2var i : integer;
3 a : array [ 1..8 ] of boolean;
4 b : array [ 2..16] of boolean;
5 c : array [-7..7 ] of boolean;
6 x : array [ 1..8 ] of integer;
7 safe : boolean;
8
9 procedure print;
10 var k: integer;
11 begin write(' ');
12 for k := 1 to 8 do write(x[k]:2);
13 writeln
14 end ;
15
16procedure trycol(j : integer);
17 var i : integer;
18
19 procedure setqueen;
20 begin a[i] := false; b[i+j] := false; c[i-j] := false;
21 end ;
22
23 procedure removequeen;
24 begin a[i] := true; b[i+j] := true; c[i-j] := true;
25 end ;
26
27 begin
28 repeat i := i+1; safe := a[i] and b[i+j] and c[i-j];
29 if safe then
30 begin setqueen; x[j] := i;
31 if j < 8 then trycol(j+1) else print;
32 removequeen
33 end
34 until i = 8
35end;
36
37begin for i := 1 to 8 do a[i] := true;
38 for i := 2 to 16 do b[i] := true;
39 for i := -7 to 7 do c[i] := true;
40 writeln(clock); trycol(1); writeln(clock)
41end.