[Delphi (Object Pascal)] Pascal经典算法详解 - N皇后问题代码 →→→→→进入此内容的聊天室

来自 , 2019-08-26, 写在 Delphi (Object Pascal), 查看 144 次.
URL http://www.code666.cn/view/9d38e6ea
  1. PROGRAM nqueen(input,output);
  2. CONST
  3.   nmax=100;
  4. VAR
  5.   x:ARRAY[1..nmax] OF integer;     {存放每个皇后位置的数组}
  6.   a:ARRAY[1..nmax] OF boolean;     {用于表示该列是否可放置的数组}
  7.   b:ARRAY[2..nmax*2] OF boolean;   {用于表示正对角线位置是否可放置的数组}
  8.   c:ARRAY[-nmax..nmax] OF boolean; {用于表示反对角线位置是否可放置的数组}
  9.   count,n:integer;
  10. PROCEDURE print;
  11.   VAR
  12.     k:integer;
  13.   BEGIN
  14.     count:=count+1;
  15.     FOR k:= 1 TO n DO
  16.       write(x[k]:4);
  17.     writeln;
  18.   END;
  19. PROCEDURE try(i:integer);
  20.   VAR
  21.     j:integer;
  22.   BEGIN
  23.     FOR j:= 1 TO n DO
  24.       IF a[j] AND b[i+j] and c[i-j]   {只有当三个位置都没有冲突时才可放置}
  25.          THEN BEGIN
  26.                x[i]:=j;
  27.                a[j]:=false;
  28.                b[i+j]:=false;
  29.                c[i-j]:=false;
  30.                IF i<n                 {若n个皇后没有放满,则递归放下一个}
  31.                   THEN try(i+1)
  32.                   ELSE print;
  33.                 a[j]:=true;           {出栈时恢复状态}
  34.                 b[i+j]:=true;
  35.                 c[i-j]:=true;
  36.                END{if}
  37.    END;{try}
  38. BEGIN{mian}
  39.   assign(input,'nqueen.in');
  40.   reset(input);
  41.   assign(output,'nqueen.out');
  42.   rewrite(output);
  43.   readln(n);
  44.   count:=0;
  45.   fillchar(a,sizeof(a),true);
  46.   fillchar(b,sizeof(b),true);
  47.   fillchar(c,sizeof(c),true);
  48.   try(1);
  49.   writeln(count);
  50.   close(input);
  51.   close(output);
  52. END.
  53.  
  54. //delphi/7188

回复 "Pascal经典算法详解 - N皇后问题代码"

这儿你可以回复上面这条便签

captcha