home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / MBUG / MBUG066.ARC / EQ.PAS < prev    next >
Pascal/Delphi Source File  |  1979-12-31  |  1KB  |  52 lines

  1.  
  2. (*
  3.     Prints solutions to the problem of placing eight queens on
  4.     a chess board in such a way that no queen checks against
  5.     any other queen.  See "Algorithms+Data Structures = Programs",
  6.     Niklaus Wirth.
  7. *)
  8.  
  9. type
  10.    boolean = (false, true);
  11.    aryi    = array[0.. 8] of integer;
  12.    aryb    = array[0..16] of boolean;
  13.  
  14. var
  15.    i : integer;
  16.    a, b, c: aryb;
  17.    x      : aryi;
  18.  
  19. procedure print;
  20.  
  21.    var
  22.       k : integer;
  23.  
  24.    begin
  25.    for k:=1 to 8 do put#0(x[k]#,' ');
  26.    put#0(13,10)
  27.    end; (* procedure print *)
  28.  
  29. procedure try(i : integer);
  30.  
  31.    var
  32.       j : integer;
  33.  
  34.    begin
  35.    for j:=1 to 8 do
  36.       if (a[j]=true) and (b[i+j]=true) and (c[i-j+7]=true) then
  37.          begin
  38.          x[i]:=j;
  39.          a[j]:=false; b[i+j]:=false; c[i-j+7]:=false;
  40.          if i<8 then try(i+1) else print;
  41.          a[j]:=true; b[i+j]:=true; c[i-j+7]:=true
  42.          end
  43.    end; (* procedure try *)
  44.  
  45. begin (* main line *)
  46. for i:= 1   to 8  do a[i]   :=true;
  47. for i:= 2   to 16 do b[i]   :=true;
  48. for i:= 0-7 to 7  do c[i+7] :=true;
  49.  
  50. try(1)
  51. end.
  52.