各位,我拿到题时,像你们样,也不知...
后来看了几个关于它的游戏,才知,放在格里面,皇后的走法是"米"字型,且可以像"象棋"的车一样横走竖走,不受格数的限制,遇神吃神,遇佛吃佛.我程序中只有每二个方法(method2.pas)达到他的要求.但是求得却是无解,所以贴出来给大家看看.
如果有什么问题请指出.

解决方案 »

  1.   

    真他妈受不了,花5分钟给你写一遍:Program Queens;{$AppType Console}Const
         MaxQueens = 8;Var
       Chessboard: Array [1..MaxQueens] Of Integer;
       ResultCounter: Integer;Function VerifyStep(Step: Integer): Boolean;
    Var
       Index: Integer;
    Begin
         Result := False;
         For Index := 1 To Step-1 Do
         Begin
              If (Chessboard[Index]=Chessboard[Step]) Or
                 (Abs(Chessboard[Index]-Chessboard[Step])=(Step-Index))
              Then
              Begin
                   Exit;
              End;
         End;
         Result := True;
    End;Procedure OutputResult;
    Var
       Step, Index: Integer;
    Begin
         Inc(ResultCounter);
         WriteLn('Result ', ResultCounter, ':');
         For Step := 1 To MaxQueens Do
         Begin
              For Index := 1 To MaxQueens Do
              Begin
                   If Chessboard[Step] = Index Then
                   Begin
                        Write('* ');
                   End
                   Else
                   Begin
                        Write('. ');
                   End;
              End;
              WriteLn;
         End;
         WriteLn;
    End;Procedure SearchStep(Step: Integer);
    Var
       Index: Integer;
    Begin
         If Step>MaxQueens Then
         Begin
              OutputResult;
              Exit;
         End;     For Index := 1 To MaxQueens Do
         Begin
              Chessboard[Step] := Index;
              If VerifyStep(Step) Then SearchStep(Step+1);
         End;
    End;Begin
         ResultCounter := 0;
         SearchStep(1);
         Write('Search finished. Press Enter...');
         ReadLn;
    End.
      

  2.   

    program NQUEEN;  var    n:Integer;    answer:Longint;    x:array[1..20]of byte;  function PLACE(k:integer):boolean; var j:integer; begin   PLACE:=true;   for j:=1 to k-1 do     if (abs(k-j)=abs(x[j]-x[k]))or(x[j]=x[k]) then       begin         j:=k-1;           PLACE:=false       end end;{PLACE}  procedure BACKTRACK; var k:integer; begin   x[1]:=0;   k:=1;   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 answer:=answer+1         else           begin             k:=k+1;             x[k]:=0           end        else  k:=k-1
         end end;{BACKTRACK}  begin   answer:=0;   fillchar(x,sizeof(x),0);   write('n=');readln(n);   BACKTRACK;   writeln('answer is ',answer); end.
      

  3.   

    我们上PASCAL,这个在我们的程序介绍中出现过!有解的,所以如果所编的程序无解,可能是程序在某个方面有你没有注意的小错误吧
      

  4.   

    各位,真多解,好像是91,还是92个,呵呵
    原来是程序的错误。嘻嘻。
    请到这里看第二个文件(新的程序),答案一大堆。
    http://www.csdn.net/filebbs/read_topic.asp?id=764这个其中的一些,我Copy一些。第1皇后的位置是:[0][0]
    第2皇后的位置是:[1][5]
    第3皇后的位置是:[2][7]
    第4皇后的位置是:[3][2]
    第5皇后的位置是:[4][6]
    第6皇后的位置是:[5][3]
    第7皇后的位置是:[6][1]
    第8皇后的位置是:[7][4]第1皇后的位置是:[0][0]
    第2皇后的位置是:[1][6]
    第3皇后的位置是:[2][3]
    第4皇后的位置是:[3][5]
    第5皇后的位置是:[4][7]
    第6皇后的位置是:[5][1]
    第7皇后的位置是:[6][4]
    第8皇后的位置是:[7][2]第1皇后的位置是:[0][0]
    第2皇后的位置是:[1][6]
    第3皇后的位置是:[2][4]
    第4皇后的位置是:[3][7]
    第5皇后的位置是:[4][1]
    第6皇后的位置是:[5][3]
    第7皇后的位置是:[6][5]
    第8皇后的位置是:[7][2]第1皇后的位置是:[0][1]
    第2皇后的位置是:[1][3]
    第3皇后的位置是:[2][5]
    第4皇后的位置是:[3][7]
    第5皇后的位置是:[4][2]
    第6皇后的位置是:[5][0]
    第7皇后的位置是:[6][6]
    第8皇后的位置是:[7][4]第1皇后的位置是:[0][1]
    第2皇后的位置是:[1][4]
    第3皇后的位置是:[2][6]
    第4皇后的位置是:[3][0]
    第5皇后的位置是:[4][2]
    第6皇后的位置是:[5][7]
    第7皇后的位置是:[6][5]
    第8皇后的位置是:[7][3]第1皇后的位置是:[0][1]
    第2皇后的位置是:[1][4]
    第3皇后的位置是:[2][6]
    第4皇后的位置是:[3][3]
    第5皇后的位置是:[4][0]
    第6皇后的位置是:[5][7]
    第7皇后的位置是:[6][5]
    第8皇后的位置是:[7][2]第1皇后的位置是:[0][1]
    第2皇后的位置是:[1][5]
    第3皇后的位置是:[2][0]
    第4皇后的位置是:[3][6]
    第5皇后的位置是:[4][3]
    第6皇后的位置是:[5][7]
    第7皇后的位置是:[6][2]
    第8皇后的位置是:[7][4]