Advertisement
cacodemon665

Eight queens problem (Unoptimized)

May 1st, 2019
281
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 1.57 KB | None | 0 0
  1. type
  2.     TArray = array [1..1000000] of longint;
  3.  
  4. procedure draw(positions: TArray; size: longint);
  5. var
  6.     field: array [1..1000, 1..1000] of longint;
  7.     i, j: longint;
  8. begin
  9.     for i := 1 to size do
  10.         for j := 1 to size do
  11.             field[i, j] := 0;
  12.  
  13.     for i := 1 to size do
  14.         field[i, positions[i]] := 1;
  15.  
  16.     writeln;
  17.  
  18.     for i := 1 to size do
  19.     begin
  20.         for j := 1 to size do
  21.         begin
  22.             write(field[i, j]);
  23.         end;
  24.  
  25.         writeln;
  26.     end;
  27. end;
  28.  
  29. function check(positions: TArray; size: longint) : boolean;
  30. var
  31.     i, j: longint;
  32. begin
  33.     for i := 1 to size do
  34.     begin
  35.         for j := 1 to size do
  36.         begin
  37.             if (i <> j) and (abs(i - j) = abs(positions[i] - positions[j])) then
  38.             begin
  39.                 check := false;
  40.                 exit;
  41.             end;
  42.         end;
  43.     end;
  44.  
  45.     check := true;
  46. end;
  47.  
  48. procedure generate(var positions : TArray; size, l, r : integer);
  49. var i,v:integer;
  50. begin
  51.     if (l=r) then
  52.     begin
  53.         if check(positions, size) then
  54.             draw(positions, size);
  55.     end
  56.     else
  57.     begin
  58.         for i := l to r do
  59.         begin
  60.             v := positions[l]; positions[l] := positions[i]; positions[i] := v;
  61.             generate(positions, size, l + 1, r);
  62.             v := positions[l]; positions[l] := positions[i]; positions[i] := v;
  63.         end;
  64.     end;
  65. end;
  66.  
  67. var
  68.     result: TArray;
  69.     size, i, cnt: longint;
  70.  
  71. begin
  72.     read(size);
  73.  
  74.     for i := 1 to size do
  75.         result[i] := i;
  76.        
  77.     generate(result, size, 1, size);
  78. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement