debug好久才发现&&写成了&!&,要细心啊
#include <iostream>
using namespace std;
const int N = 20;
// bool数组用来判断搜索的下一个位置是否可行
// col列,dg对角线,udg反对角线// g[N][N]用来存路径
int n;
char g[N][N];
bool col[N], dg[N], udg[N];
void dfs(int u) {
if (u == n) {
//cout<<" "<<endl;
for (int i = 0; i < n; i++)
cout << g[i] << endl; //一行一行输出
cout<<" "<<endl;
return ;//结束当前段递归函数
}
//对n个位置按行搜索
for (int i = 0; i < n; i++) { //共计n列
if (!col[i] && !dg[i + u] &&!udg[i - u + n]) { //剪枝条件,对角线经过点坐标(u,i);y=x+b;y=-x+b;b>0;
g[u][i] = 'Q';
col[i] = dg[i + u] = udg[i - u + n] = true; //此行已经填完,进行下一行
dfs(u + 1);
col[i] = dg[i + u] = udg[i - u + n] = false; // 结束后恢复现场 为下一次重新搜索准备
g[u][i] = '.';
}
}
}
int main() {
cin >> n;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
g[i][j] = '.';
}
}
dfs(0);
return 0;
}
//部分参考高赞大佬的优秀回答,感谢'''