BSD 1 development
[unix-history] / puman / eightout1
CommitLineData
5bd13011
BJ
1UNIX Pascal PI -- Version 1.0 (September 6, 1977)
2
3Tue Sep 6 10:40 1977 eightqueens.p
4
5 1 program eightqueens(output);
6 2 label 13;
7 3 var i : integer;
8 4 a : array [ 1..8 ] of boolean;
9 5 b : array [ 2..16] of boolean;
10 6 c : array [-7..7 ] of boolean;
11 7 x : array [ 1..8 ] of integer;
12 8 safe : boolean;
13
14 10 procedure print;
15 11 var k, l: integer;
16 12 begin
17 13 writeln;
18 14 writeln('*** Solution to the Eight Queens Problem ***');
19 15 writeln;
20 16 for l := 1 to 8 do begin
21 17 write(tab, 9 - l : 1, ' ');
22 18 for k := 1 to 8 do begin
23 19 if x[l] = k then
24 20 write('Q ')
25 21 else if odd (k + l) then
26 22 write('* ')
27 23 else
28 24 write('- ')
29 25 end;
30 26 writeln
31 27 end;
32 28 writeln;
33 29 writeln(tab, ' q q q q k k k k');
34 30 writeln(tab, ' r n b b n r');
35 31 writeln;
36 32 goto 13
37 33 end ;
38
39 35 procedure trycol(j : integer);
40 36 var i : integer;
41
42 38 procedure setqueen;
43 39 begin a[i] := false; b[i+j] := false; c[i-j] := false;
44 40 end ;
45
46 42 procedure removequeen;
47 43 begin a[i] := true; b[i+j] := true; c[i-j] := true;
48 44 end ;
49
50 46 begin
51 47 repeat i := i+1; safe := a[i] and b[i+j] and c[i-j];
52 48 if safe then
53 49 begin setqueen; x[j] := i;
54 50 if j < 8 then trycol(j+1) else print;
55 51 removequeen
56 52 end
57 53 until i = 8
58 54 end;
59
60 56 begin
61 57 for i := 1 to 8 do a[i] := true;
62 58 for i := 2 to 16 do b[i] := true;
63 59 for i := -7 to 7 do c[i] := true;
64 60 trycol(1);
65 61 writeln('No solutions!');
66 62 halt;
67 63 13:
68 64 end.
69Execution begins...
70
71*** Solution to the Eight Queens Problem ***
72
73 8 Q * - * - * - *
74 7 * - * - Q - * -
75 6 - * - * - * - Q
76 5 * - * - * Q * -
77 4 - * Q * - * - *
78 3 * - * - * - Q -
79 2 - Q - * - * - *
80 1 * - * Q * - * -
81
82 q q q q k k k k
83 r n b b n r
84
85Execution terminated
864208 statements executed in 0.52 seconds cpu time