home *** CD-ROM | disk | FTP | other *** search
/ minnie.tuhs.org / unixen.tar / unixen / PDP-11 / Distributions / ucb / spencer_2bsd.tar.gz / 2bsd.tar / src / pascal / tests / eightqueens.p < prev    next >
Text File  |  1980-02-17  |  1KB  |  46 lines

  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.
  46.