“2n皇后”问题本质上还是 用 dfs 写“8皇后”问题。
先确定黑皇后的排列,再确定白皇后的排列。
此代码特色:
1)用一维数组posb[maxn]、posw[maxn]即可表示黑白皇后的摆放。
eg. posb[2]=1 表示黑皇后在第二行第一列放一枚。
2)if( posw[i] == posw[cur] || abs(i-cur) == abs(posw[i]-posw[cur]))
这个是本程序的关键代码。可判断是否有同列(不可能同行),左右斜对角线的皇后。
完整代码:
#include<cmath>
#include<iostream>
using namespace std;
const int maxn = 10;
int n;
int map_Q[maxn][maxn];
int posb[maxn]={
0};
int posw[maxn]={
0};
int ans;
bool checkw( int cur) //检查函数
{
for( int i = 1; i < cur; i++)
if( posw