我已经为 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;
}