#include <iostream>
using namespace std;
//打印测试结果
void output(bool qipan[][8])
{
for(int i=0;i<8;i++)
{
for(int j=0;j<8;j++)
{
cout<<qipan[i][j]<<" ";
}
cout<<endl;
}
cout<<endl;
}
//因为是按列放棋子,所以不用判断列上是否有棋子
bool nodanger(int i,int k,bool m[][8])
{
for(int j=0;j<8;j++)//
{
if(m[i][j]==true)//(横向找
{
return 0;
}
//两个斜的方向找
if(i-j-1>=0&&i-j-1<=7&&k-j-1>=0&&k-j-1<=7&&m[i-j-1][k-j-1]==true)
{
return 0;
}
if(i+j+1<=7&&k-j-1<=7&&k-j-1>=0&&m[i+j+1][k-j-1]==true)
{
return 0;
}
}
return 1;
}
int queen(bool m[][8],int k)//k is column
{
int sum=0;
for(int i=0;i<8;i++)
{
if(nodanger(i,k,m))
{
m[i][k]=true;
if(k==7)
{
output(m);
m[i][k]=false;//important,
//找完后找下一个前要清空本次查找的格子
return 1;
}
sum+=queen(m,k+1);
m[i][k]=false;
}
else
{
continue;
}
}
return sum;
}
int main()
{
bool qipan[8][8]={0};
int sum=0;
sum=queen(qipan,0);
cout<<sum;
system("pause");
}
12-27
403
12-27
376
09-10
268
09-08
238
09-05
184
12-27
160