Commit | Line | Data |
---|---|---|
fde98a2d BJ |
1 | program eightqueens(output); |
2 | var 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 | ||
16 | procedure 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 | |
35 | end; | |
36 | ||
37 | begin 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) | |
41 | end. |