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