问题描述
在N*N的方格棋盘放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在与棋盘边框成45角的斜线上。你的任务是,对于给定的N,求出有多少种合法的放置方法。
#include <iostream>
using namespace std;
int number = 0;
int c[20] = {0};//各个列占用情况
int d1[20 + 19] = {0};//d1[i+j]对角线占用情况
int d2[20 + 19] = {0};//d2[i-j+n-1]对角线占用情况
void queen(int n,int i)
{
if(i>=n)
{
number++;
return;
}
for (int j = 0; j < n;j++)
{
if(c[j]==0&&d1[i+j]==0&&d2[i-j+n-1]==0)
{
c[j] = d1[i + j] = d2[i - j + n - 1] = 1;
queen(n, i + 1);
c[j] = d1[i + j] = d2[i - j + n - 1] = 0;
}
}
}
int main()
{
int n;
cin >> n;
queen(n, 0);
cout << number<<endl;
return 0;
}