算法
回溯的思想
代码
来源于《算法竞赛入门经典》
#include<iostream>
using namespace std;
int n, tot = 0, c[20];
void search(int cur){
if (cur>n)tot++;//递归边界,只要走到这里,所有皇后必然不冲突
else for (int i = 1; i <= n; i++){
int ok = 1;
c[cur] = i;//尝试把第cur行的皇后放在第i列
for (int j = 1; j < cur; j++)//检查是否和前面的皇后冲突
if (c[cur] == c[j] || cur - c[cur] == j - c[j]
|| cur + c[cur] == j + c[j]){
ok = 0;
break;
}
if (ok)search(cur + 1);//如果合法,则继续递归
}
}
int main(){
cin >> n;
search(1);
cout << tot << endl;
return 0;
}