结果:
打印输出所有满足条件的摆放位置图 和 所有满足条件的数目(ans)。
#include<iostream>
#include<string.h>
#include<stdio.h>
#include<cstdio>
using namespace std;
int n;
int G[20][20];
bool a[20];//列占用情况
bool x1[20];// 左下右上对角占用情况 左上角对应斜线x1[0]
bool y1[20];//左上右下对角占用情况 左下角对应斜线y1[0]
int ans =0;
void dfs(int deep){
if(deep>=n){
for(int i=0;i<n;++i){
for(int j=0;j<n;++j){
cout<<G[i][j]<<" ";
}
cout<<endl;
}
cout<<'\n';
ans++;
return;
}
for(int i=0;i<n;i++){
if(x1[i+deep]==false&&y1[i-deep+n]==false&&a[i]==false){
x1[deep+i] = true;
y1[i-deep+n] = true;
a[i] = true;
G[deep][i] =1;
dfs(deep+1);
a[i] = false;
x1[deep+i] = false;
y1[i-deep+n] = false;
G[deep][i] = 0;
}
}
}
int main() {
cin >> n;
memset(a,false,sizeof(a));
memset(x1,false,sizeof(x1));
memset(y1,false,sizeof(y1));
memset(G,0,sizeof(G));
dfs(0);
cout<<"满足条件的数目为:"<<ans<<'\n';
return 0;
}