#include <bits/stdc++.h>
using namespace std;
#define fast ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0)
#define vc vector
#define pii pair <int, int>
#define int long long
#define x first
#define y second
#define all(a) a.begin(),a.end()
#define endl '\n'
int col[15]={0};
const int inf=1e5+5;
const int mod=1e9+7;
int arr[15][9];
int n,tol=0;
int a=0;
//八皇后 加入一个列的输出
bool check(int r,int c){
for(int i=0;i<r;i++){//给出了行,判断列是否冲突
if(col[i]==c||abs(col[i]-c)==abs(i-r)) return false;//判断是否冲突,前者行冲突,后者对角线冲突
}
return true;
}
void dfs(int r){
if(r==n){
tol++;
a++;
if(a<=3){//前三个解
for(int i=0;i<n;i++){
cout<<col[i]+1<<' ';
}
cout<<endl;
}
return ;
}
for(int c=0;c<n;c++){
if(check(r,c)) {
col[r]=c;//存储列,方便输出,还有就是判断是否冲突
dfs(r+1);//进入下一行
}
}
return ;
}
void dfs(int r){
if(r==n){
tol++;
a++;
if(a<=3){
for(int i=0;i<n;i++){
cout<<col[i]+1<<' ';
}
cout<<endl;
}
return ;
}
for(int c=0;c<n;c++){
if(check(r,c)) {
col[r]=c;
dfs(r+1);
}
}
return ;
}
signed main(){
fast;
cin>>n;
dfs(0);
cout<<tol<<endl;
return 0;
}
洛谷八皇后问题
最新推荐文章于 2024-07-22 09:38:37 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)