这是求解8皇后问题有多少种不同的放法
#include<iostream>
using namespace std;
#pragma warning(disable:4996)
// 8皇后问题
int ans = 0;
bool col[10], x1[20], x2[20]; // x1 x2表示两条对角线上的位置
bool check(int r, int i) {
return !col[i] && !x1[r + i] && !x2[r - i + 8];
}
void dfs(int r) {
if (r == 8)
{
ans++;
return;
}
for (int i = 0; i < 8; i++)
{
if (check(r,i)) //判断该位置是否能放
{
col[i] = x1[r + i] = x2[r - i + 8] = true; //能放,就设为true
dfs(r + 1); //从下一行开始
col[i] = x1[r + i] = x2[r - i + 8] = false; //放完之后需要恢复原来的值
}
}
}
int main() {
dfs(0); //从第0行开始搜索
cout << ans << endl;
return 0;
}