题目:
n−皇后问题是指将 n 个皇后放在 n×n 的国际象棋棋盘上,使得皇后不能相互攻击到,即任意两个皇后都不能处于同一行、同一列或同一斜线上。
关键点:
(1)使用DFS。
(2)同一对角线的判定:u - i + n;i + u。
笔记:
代码:
#include<iostream>
using namespace std;
const int N = 10;
int n;
char q[N][N];
bool col[N],dg[N],indg[N];
void dfs(int h)
{
if(h == n)
{
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
cout << q[i][j];
cout << endl;
}
cout << endl;
return;
}
for(int i = 0;i < n;i++)
{
if(!col[i] && !dg[i-h+n] && !indg[h+i])
{
q[h][i] = 'Q';
col[i] = dg[i-h+n] = indg[h+i] = true;
dfs(h+1);
q[h][i] = '.';
col[i] = dg[i+n-h] = indg[h+i] = false;
}
}
}
int main()
{
cin >> n;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
q[i][j] = '.';
dfs(0);
return 0;
}