回 帖 发 新 帖 刷新版面

主题:谁能帮我解八皇后问题?有加分

八皇后问题是一个古老而著名的问题,是回朔算法的典型例题。该问题是19世纪著名的
数学家高斯1850年提出:在8*8的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行,同一列或同一斜线上,问有多少种摆法。
[fly]谁能帮我解八皇后问题?[/fly]

回复列表 (共9个回复)

沙发

许多讲pascal的教程,都有这个题。

板凳

用肺说话-说肺(废)话

3 楼

我看到这几个字都看了N回了~

4 楼

一共有92种摆法.
program zhs (input,output);
  var
    x:array[1..8] of integer;
    a,b,c:array[-7..16] of boolean;
    i:integer;
  procedure print;
    {如果加好多分的话,下次就给你这个}
  procedure try(i:integer);
    {如果加好多分的话,下次就给你这个}
  begin
    for i:=-7 to 16 do
      begin
        a[i]:=true;
        b[i]:=true;
        c[i]:=true
      end;
    try(1)
  end.

5 楼

现在给过程print代码;
procedure print;
  var
    k:integer;
  begin
    for k:=1 to 8 do
      write(x[k]:4);
    writeln
  end;
现在给过程try:
program try (i:integer);
  var
    j:integer;
  begin
    for j:=1 to 8 do
      if a[j] and b[i+j] and c[i-j]
        then begin
               x[i]:=j;
               a[j]:=false;
               b[i+j]:=false;
               c[i-j]:=false;
               if i < 8
                 then try(i+1)
                 else print;
               a[j]:=true;
               b[i+j]:=true;
               c[i-j]:=true
             end
  end;

6 楼

楼上的好BT呀`|

7 楼

见分眼开   晕```````

8 楼

oh~~~no~~~~
我觉得zhsas的程序有问题~~~
i到了后来好像就是个定值了~~~~
但你还用了一个if还判断i是否小于8;
其实我也没怎么看懂,能解释一下吗?

9 楼

我编的n皇后(求一组解);
program yb(input,output);
const max=100;
var way:array[1..max,1..max]of boolean;
     a,b,c:array[1-max..max+max]of boolean;
     s,hmq:integer;
  procedure search(n:integer);
   procedure print;
    var i,j:integer;
     begin
      for i:=1 to hmq do begin
       for j:=1 to hmq do
        if way[i,j] then
         write('Q','  ')
        else
         write('.','  ');
       writeln;
      end;
     writeln;
     inc(s);
    end;
  var j:integer;
   begin
    if n>hmq then print else begin
      for j:=1 to hmq do
       if (a[j])and(b[n-j])and(c[n+j]) then
       if s<>1 then
        begin
         way[n,j]:=true;
         a[j]:=false;
         b[n-j]:=false;
         c[n+j]:=false;
         search(n+1);
         a[j]:=true;
         b[n-j]:=true;
         c[j+n]:=true;
         way[n,j]:=false;
        end
       else exit;
     end;
   end;
begin
  s:=0;
  writeln('How many q?');
  read(hmq);
  fillchar(way,sizeof(way),false);
  fillchar(a,sizeof(a),true);
  fillchar(b,sizeof(b),true);
  fillchar(c,sizeof(c),true);
  search(1);
  readln;
end.

我来回复

您尚未登录,请登录后再回复。点此登录或注册