我的这份代码思路是用一个一维数组存棋盘。若设棋盘为一个平面直角坐标系,那么数组下标可表示纵坐标y,数组某一项a[y]的值x就是横坐标。
(原有皇后坐标为 (a[i],i),新添加的皇后坐标为(x,y))
a[i]==x
a[i]−i==y−x
a[i]+i==x+y
代码如下,对输入8输出2342而不是正解92
#include<bits/stdc++.h>
using namespace std;
int n,a[20],ans=0;//棋盘建系,坐标为(x,y),即(a[i],i)
bool check(int x,int y){
for(int i=1;i<y;i++){
if(a[i]==x||a[i]-i==x-y||a[i]+i==y+x)return 0;
}
return 1;
}
void Add_Queen(int x){
for(int y=1;y<=n;y++){
if(check(x,y)){
a[y]=x;
if(x+1<=n)Add_Queen(x+1);
else{
ans++;return;
}
}
}
}
int main(){
cin>>n;
Add_Queen(1);
cout<<ans;
}