(* queen.pasc *) (* comprehensive test case, for your fun and 5 more points*) (* output: 92 chess boards *) program queen is var col: array(1..8) of 1..8; colfree: array(1..8) of integer; upfree: array(2..16) of integer; downfree: array(-7..7) of integer; row: 0..8; x: integer; num: integer; procedure writeboard is var j, i: 1..8; temp: array(1..8) of char; begin num:= num+1; write(num); write('\n'); for i := 1 to 8 loop for j := 1 to 8 loop if i = col(j) then temp(j) := 'Q' else temp(j) := 'X' endif; endloop; write(temp(1), ' ', temp(2), ' ', temp(3), ' ', temp(4), ' ', temp(5), ' ', temp (6), ' ', temp(7), ' ', temp(8)); write('\n'); endloop; write('\n'); end; procedure addqueen is var c:1..8; begin row:= row+1; for c := 1 to 8 loop if (colfree(c)=1) and (upfree(row+c)=1) and (downfree(row-c)=1) then col(row) := c; colfree(c) := 0; upfree(row+c) := 0; downfree(row-c) := 0; if row = 8 then writeboard else addqueen endif; colfree(c) := 1; upfree(row+c) := 1; downfree(row-c) := 1 endif; endloop; row:= row-1 end; begin num := 0; row:=0; for x := 1 to 8 loop colfree(x):= 1 endloop; for x := 2 to 16 loop upfree(x):= 1 endloop; for x := -7 to 7 loop downfree(x):= 1 endloop; addqueen end.