我已经为 8-Queens 问题编写了一个程序。它打印了所有可能的解决方案。
Queens() 找到所有可能的解决方案。ok() 告诉给定的列和行是否安全。
非常奇怪的问题是:
“计数”不会增加。我不知道为什么。
#include<iostream.h>
#include<stdlib.h>
#include<conio.h>
int arr[8][8]={0};
int count=0;
int ok(int k,int j)
{
 int i,l;
 int tup[8]={0};
 for(i=0;i<k;i++)
 {
  for(l=0;l<8;l++)
  {
   if(arr[i][l]==1)
   tup[i]=l;
  }
 }
 for(i=0;i<k;i++)
 {
  if((abs(tup[i]-j)==abs(i-k))||(tup[i]==j)||(arr[i][j]==1))
  return 0;
 }
 return 1;
}
void queen(int i)
{
 int j,k,temp;
 if(i==8)
 {
  count++;
  cout<<"Solution no. "<<count<<":\n";
  for(i=0;i<8;i++)
  {
   for(j=0;j<8;j++)
   {
    if(arr[i][j]==1)
    cout<<"Q";
    else
    cout<<"=";
    cout<<" ";
   }
   cout<<"\n";
  }
  cout<<"---------------\n";
  getch();
 }
 for(j=0;j<8;j++)
 {
  if(ok(i,j))
  {
   for(k=0;k<8;k++)
   arr[i][k]=0;
   arr[i][j]=1;
   queen(i+1);
  }
 }
 arr[i][j]=0;
}
int main()
{
 clrscr();    
 queen(0);
 return 0;
}