n-皇后问题
这个题我们要使用dfs来写,我们要一行一行的来放皇后,再判断一下是否合法就行了。但是怎么判断合不合法呢?
我们发现,我们只要判断竖着的、左斜着的右斜着的,那怎么判断呢?
只需要将我们的二维数组转换成一维数组就行了,不需要什么高深的方法。
代码
#include <bits/stdc++.h>
using namespace std;
int shu[105],zuoxie[105],youxie[105];
int n;
char c[105][105];
void dfs(int step){
if(step > n){
for(int i = 1; i <= n; i ++){
for(int j = 1; j <= n; j ++){
cout << c[i][j];
}
cout << endl;
}
cout << endl;
}
for(int i = 1; i <= n; i ++){
if(!shu[i] && !zuoxie[step + i] && !youxie[n - step + i]){
shu[i] = zuoxie[step + i] = youxie[n - step + i] = true;
c[step][i] = 'Q';
dfs(step + 1);
c[step][i] = '.';
shu[i] = zuoxie[step + i] = youxie[n - step + i] = false;
}
}
}
int main(){
for(int i = 1; i <= 9; i ++){
for(int j = 1; j <= 9; j ++){
c[i][j] = '.';
}
}
cin >> n;
dfs(1);
return 0;
}