调试了好多次
如下:
#include<iostream>
#include<vector>
#include<string>
using namespace std;
int cnt = 0, te = 0;
int bat[1000] = { 0 };
vector<vector<string>> res;
void output() {
string init(te, '.');
vector<string> res_temp(te,init);
for (int i = 1; i <= te; i++) {
if (bat[i])
res_temp[i - 1][bat[i]-1] = 'Q';
}
res.push_back(res_temp);
}
int get(int x) {
if (x > te) {
cnt++;
output();
return 0;
}
for (int tj = 1; tj <= te; tj++) {
int j = 1;
while (j < x) {
if (bat[j] == tj || fabs(j - x) == fabs(bat[j] - tj)) {
break;
}
j++;
}
if (j == x) {
bat[x] = tj;
get(x + 1);
}
}
return 0;
}
int main() {
int n;
cin >> n;
te = n;
get(1);
for (int i = 0; i < cnt; i++) {
for (int j = 0; j < te; j++) {
cout << res[i][j];
}
cout << endl;
}
cout << cnt << endl;
return 0;
}