Commit | Line | Data |
---|---|---|
bb56dd76 BJ |
1 | program eightqueens(output); |
2 | const doprint = 0; | |
3 | var 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 | ||
20 | procedure 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 | |
39 | end; | |
40 | ||
41 | begin 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); | |
45 | end. |