program Project1;{$APPTYPE CONSOLE}uses
  SysUtils;
const n=8;
type list=record
  tag:integer;
  data:integer;
end  ;
//int m,j,k,t,i=0;
var
    a:array[0..n,0..n] of list;
    m,j,k,t:integer;
    i:integer;
begin
    i:=0;
    t:=0;
    for j:=0 to n do
    for k:=0 to n do
    begin
a[j][k].data:=0;
a[j][k].tag :=0;
    end;
    while i<n do
    begin
       m:=0;
       while m<n do
       begin
        if a[m][i].data<>0 then
           m:=m+1
      else
           break;
       end;
       if (m<n) and (i=7) then
       begin
          writeln('good');
          a[m][i].data:=1;
          break;
       end;
       if m<n then
       begin
          a[m][i].data:=1;
          for j:=0 to n do
          begin
             if j>i then
     begin
     a[m][j].data:=2;
      a[m][j].tag:=a[m][j].tag+1;
     end;
             for k:=0 to n do//(k=0;k<n;k++)
      begin
      if k>i then
      begin
         if (k+j)=(i+m) then
           begin
          a[j][k].data:=2;
          a[j][k].tag:=a[j][k].tag+1;
               end;
           if (k-j)=(i-m) then
              begin
          a[j][k].data:=2;
           a[j][k].tag:=a[j][k].tag+1;
         end;
     end;
      end;
          end;
          i:=i+1;
          end
       else
       begin
        i:=i-1;
    for j:=0 to n do//(j=0;j<n;j++)
  if a[j][i].data=1 then
begin
  a[j][i].data:=2;
  t:=j;//找到了行。
end;
   for j:=0 to n do //(j=0;j<n;j++)
begin
  if j>i then //对该数所对应的行进行处理,还原。
begin
a[t][j].tag:=a[t][j].tag+1;
if a[t][j].tag=0 then
a[t][j].data:=0;
end;
  for k:=0 to n do //(k=0;k<n;k++)
begin
if k>i then
begin

if (k+j)=(i+t) then
begin
a[j][k].tag:=a[j][k].tag+1;
if  a[j][k].tag=0 then
a[j][k].data:=0;
end;
if (k-j)=(i-t) then
begin
a[j][k].tag:=a[j][k].tag+1;
if  a[j][k].tag=0 then
a[j][k].data:=0;
end;
end;
end;
end;  
 end;
       end;
      for j:=0 to n do//(j=0;j<n;j++)
 for i:=0 to n do//(i=0;i<n;i++)
 if a[j][i].data=1 then
         writeln(inttostr(i));
//  cout<<j<<'\t'<<i<<endl;
end.麻烦各位给看看

解决方案 »

  1.   

    八皇后问题的递归算法#include <stdio.h>
    #include <stdlib.h>
    #define N 8                    /* 棋盘边长  */
    #define XXN     15             /* 正(反)对角线个数 */
    #define TRUE 1
    #define FALSE 0 
    int map[N][N];                 /* 棋盘     */ 
    int col[N];                    /* 列       */
    int XX[XXN];                   /* 正对角线 */
    int YY[XXN];                   /* 反对角线 */
    FILE* fp;
    int num=0;                     /* 解的个数 *//***显示一个解***/
    void showMap()
    {int i,j;
    fprintf(fp,"\n--------------------------\n");
    for(i=0;i<N;i++){
       for(j=0;j<N;j++)
        fprintf(fp,"%-3d",map[i][j]);
       fprintf(fp,"\n");
      }
    }/***递归求解函数***/
    int  try(int y)
    {
    int i,j;
    int success=FALSE;
    if( y==N){                           /* 求出一个解*/
      showMap();
      num++;
      return TRUE;
    }
    for(i=0;i<N;i++){
      if(XX[N-y+i]==0 && YY[i+y]==0 && col[i]==0) /* 保证布局要求:对角线,列,没有重复放置棋子 */
      {    XX[N-y+i]=YY[i+y]=col[i]=map[y][i]=1; 
       if(try(y+1)) success=TRUE;                         /* 放下一个皇后  */   
       XX[N-y+i]=YY[i+y]=col[i]=map[y][i]=0;
      }}
    return success;
    }
    main()
    {
    int i,j,result;fp=fopen("queen8.txt","w+");
    for(i=0;i<N;i++)
      for(j=0;j<N;j++)
       map[i][j]=0;
    for(i=0;i<XXN;i++) XX[i]=YY[i]=0;fprintf(fp,"\n start..............");
    if(!try(0))printf("\n no resolution!");
    fprintf(fp,"\n num=%d",num);}
      

  2.   

    C语言的我写了也可以正常运行,改成delphi下的就奇怪了,有错