回 帖 发 新 帖 刷新版面

主题:求8皇后的1数组解

1数组就是说在求解8皇后的过程中,只用1维数组,而且只用1个数组!!求解,解出是高手!!!!!!![em4][em4][em4][em7][em7][em8][em9][em10][em11][em12][em13][em15][em14][em19][em20][em1]

回复列表 (共4个回复)

沙发

好象是标准教科书上的东东啊!教科书就是用一个一维组数组的啊!解出来也不算高手啊!你不会想把循环变量什么的都往数组里塞吧?那就晕倒~~~[em10]

忘了说噢!我不常来,下面2楼我提的N皇后问题,有个程序放在
http://jtchang.51.net/data/qn.zip
里,因为是免费空间所以有时不能下载。如果能下载的话,有兴趣可以看看噢!

板凳

const
     N=8;
var
     k: integer;
     x: array[1..N] of integer;
     sum: longint;

procedure PrintChessboard;
var
    i,j:integer;
begin
    writeln;
    writeln('No. ',sum);
    for i:=1 to N do
      begin
          for j:=1 to N do
            begin
               if j=x[i] then write('Q':2)
                    else write('.':2);
             end;
           writeln;
      end;
    for i:=1 to N do write(x[i]:3);
    writeln;
    writeln('Press Enter...');
    readln;
end;

function place(k: integer): boolean;
var
   j:integer;
begin
   for j:=1 to k-1 do
     if (k-j=abs(x[k]-x[j])) or (x[k]=x[j]) then
       begin
            place:=false;
            exit;
       end;
    place:=true;
end;

begin
    x[1]:=0;   k:=1;  sum:=0;
    while k>0 do
     begin
        x[k]:=x[k]+1;
        while (x[k]<=N)  and not place(k) do x[k]:=x[k]+1;
        if x[k]<=N then
           if k=N then
               begin
                   sum:=sum+1;
                   PrintChessboard;
               end
           else
              begin
                 k:=k+1;
                 x[k]:=0;
              end
        else  k:=k-1;
     end;
     writeln;
     writeln('Sum: ',sum);
end.



告诉你怎样才算高手:

n皇后问题

n行n列的方形棋盘上,放上n个皇后,使得没有任何两个皇后互相攻击。
设:  4<=  n <= 100

由键盘输入n的值,要求:

(1) 打印出一种满足条件的摆法。
(只要求打印出1种摆法就算完成任务)

(2) 程序从输入n值起,到找到答案止,运行时间不得超过10秒钟.
(10秒钟算是很客气啦,其实不用一两秒钟就能摆平)

3 楼

好象在以前的竞赛有这样的题目哦

4 楼

如果只打出一种解,那是太容易的了……10s绝对足够
要打出所有解就必须遍历整个解空间,是不可能很快的

我来回复

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