AcWing 3472. 八皇后
作者:
把这题Ac了
,
2024-09-27 19:41:13
,
所有人可见
,
阅读 3
#include <iostream>
using namespace std;
typedef pair<int,int> PII;
const int N = 20;
char g[N][N];
int col[N],row[N],dg[N],udg[N];
int path[1000][10];
int idx = 1;
void dfs(int u){
if(u > 8){
int p = 1;
for(int i = 1;i <= 8;i++){
for(int j = 1;j <= 8;j++){
if(g[i][j] == 'Q')
path[idx][p++] = j;
// cout << j;
}
}
// cout << endl;
idx++;
return;
}
//关键在于u是按行有先排序即从1开始直到最后一个是从8开始
for(int i = 1;i <= 8;i++){
if(!col[i] && !row[u] && !dg[u + i] && !udg[u - i + 8]){
g[u][i] = 'Q';
col[i] = row[u] = dg[u + i] = udg[u - i + 8] = 1;
dfs(u + 1);
col[i] = row[u] = dg[u + i] = udg[u - i + 8] = 0;
g[u][i] = '.';
}
}
}
int main(){
int n;
cin >> n;
for(int i = 1;i <= 8;i++)
for(int j = 1;j <= 8;j++)
g[i][j] = '.';
dfs(1);
while(n--){
int k;
cin >> k;
for(int i = 1;i <= 8;i++) cout << path[k][i];
cout << endl;
}
return 0;
}