#include <iostream>
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
const int N = 1010;
int x[N], tot, n;
vector<int> v[N];
bool Constraint(int j){
for(int i = 1; i < j; i++)
if(abs(x[i]-x[j])==j-i) return false;
return true;
}
void Backtrack(int t){
if(t > n) {
++tot;
v[tot].clear();
for(int j = 1; j <= n; j++) v[tot].push_back(x[j]);
return;
}
for(int i = t; i <= n; i++){
swap(x[t], x[i]);
if(Constraint(t))
Backtrack(t+1);
swap(x[t], x[i]);
}
return;
}
int main(){
while(cin >> n){
tot = 0;
for(int i = 1; i <= n; i++) x[i] = i;
Backtrack(1);
cout << tot << endl;
for(int i = 1; i <= tot; i++){
for(auto it:v[i]) cout << it;
cout << endl;
}
}
return 0;
}
算法设计-n皇后问题的排列树写法
最新推荐文章于 2023-11-18 17:32:48 发布