UNIX Pascal PI -- Version 1.0 (September 6, 1977) Tue Sep 6 10:40 1977 eightqueens.p 1 program eightqueens(output); 2 label 13; 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; 10 procedure print; 11 var k, l: integer; 12 begin 13 writeln; 14 writeln('*** Solution to the Eight Queens Problem ***'); 15 writeln; 16 for l := 1 to 8 do begin 17 write(tab, 9 - l : 1, ' '); 18 for k := 1 to 8 do begin 19 if x[l] = k then 20 write('Q ') 21 else if odd (k + l) then 22 write('* ') 23 else 24 write('- ') 25 end; 26 writeln 27 end; 28 writeln; 29 writeln(tab, ' q q q q k k k k'); 30 writeln(tab, ' r n b b n r'); 31 writeln; 32 goto 13 33 end ; 35 procedure trycol(j : integer); 36 var i : integer; 38 procedure setqueen; 39 begin a[i] := false; b[i+j] := false; c[i-j] := false; 40 end ; 42 procedure removequeen; 43 begin a[i] := true; b[i+j] := true; c[i-j] := true; 44 end ; 46 begin 47 repeat i := i+1; safe := a[i] and b[i+j] and c[i-j]; 48 if safe then 49 begin setqueen; x[j] := i; 50 if j < 8 then trycol(j+1) else print; 51 removequeen 52 end 53 until i = 8 54 end; 56 begin 57 for i := 1 to 8 do a[i] := true; 58 for i := 2 to 16 do b[i] := true; 59 for i := -7 to 7 do c[i] := true; 60 trycol(1); 61 writeln('No solutions!'); 62 halt; 63 13: 64 end. Execution begins... *** Solution to the Eight Queens Problem *** 8 Q * - * - * - * 7 * - * - Q - * - 6 - * - * - * - Q 5 * - * - * Q * - 4 - * Q * - * - * 3 * - * - * - Q - 2 - Q - * - * - * 1 * - * Q * - * - q q q q k k k k r n b b n r Execution terminated 4208 statements executed in 0.52 seconds cpu time