**
ps:国际象棋中皇后的攻击方向为横向,竖向和斜向;现要在8×8的棋盘中摆放八位皇后,要求各位皇后不再彼此的攻击范围内;
**
分为两步:
1、摆放一位皇后;
2、找出安全位置;
#include <bits/stdc++.h>
using namespace std;
int num=0;
struct point
{
int x;
int y;
};
void qset(point *p,int n)
{
p[n].x=n;
for(int i=0;i<8;i++){
int flag=1;
for(int j=0;j<n;j++){
if(p[j].y==i||abs(p[j].x-n)==abs(p[j].y-i)) //判断是否安全
{
flag=0;break;
}
}
if(flag) {
if(n<7) p[n].y=i,qset(p,n+1);
else //对符合要求的结果进行输出;
{
num++;
int chess[8][8]={0};
for(int j=0;j<8;j++){
chess[p[j].x][p[j].y]=1;
}
for(int j=0;j<8;j++){
for(int k=0;k<8;k++){
cout<<chess[j][k]<<" ";
}
cout<<endl;
}
cout<<endl;
}
}
}
}
int main(){
point p[8];//八位皇后;
int n=0;
qset(p,n);
cout<<num<<endl;
return 0;
}