#include <iostream>
#include <cstdlib>
using namespace std;
int a[8];
int sum=0;
void print()
{
int i,j;
cout<<"No "<<sum<<":"<<endl;
for(i=0;i<8;i++)
{
for(j=0;j<8;j++)
{
if(a[i]==j)
cout<<'A';
else
cout<<'.';
}
cout<<endl;
}
}
int canplace(int row,int col)
{
int i;
for(i=0;i<row;i++)
{
if(a[i]==col||abs(i-row)==abs(a[i]-col)) //abs函数功能是求绝对值 ,之前的行的皇后没有在同一列上的,也没有在对角线上的
return 0;
}
return 1;
}
void search(int m)
{
if(m==8)
{
sum++;
print();
}
else
{ int i;
for(i=0;i<8;i++)
{
a[m]=i;
if(canplace(m,i))//判断为1则执行花括号里的,为0则不执行
{
search(m+1);//如果判断位置合适,放置一个皇后,进入下一行
}
}
}
}
int main()
{
search(0);
return 0;
}
NOJ1007八皇后问题
最新推荐文章于 2022-06-14 19:32:23 发布