#include <iostream>
#include <vector>
#include <cstring>
using namespace std;
int n, res = 0;
int pos[11];
void dfs(int k){ //前0~k-1个皇后已经摆好了,现在摆第k个
if(k == n){
res++;
return;
}
for(int i = 0; i < n; i++){ //尝试摆在不冲突的某一列
int j;
for(j = 0; j < k; j++){ //遍历前面所有行 查询
if(pos[j] == i || abs(pos[j] - i) == abs(j - k))
break;
}
if(j == k){ //说明当前列可以摆
pos[k] = i;
dfs(k+1); //处理第k+1个皇后
}
}
}
int main(){
cin >> n;
dfs(0);
cout<<res<<endl;
return 0;
}
51nod 2067 n 皇后问题
最新推荐文章于 2022-03-07 22:36:01 发布