题解 | #八皇后#
八皇后
https://www.nowcoder.com/practice/fbf428ecb0574236a2a0295e1fa854cb
#include <iostream>
using namespace std;
#include<vector>
#include<algorithm>
vector<string>q;
//x表示所处行 y表示所处列
int n;
string res;
bool co[20],dg[20],udg[20];////分别表示行、对角线、反对角线上位置标记
void dfs(int x){
if(x==8) {
//cout<<res<<endl;
q.push_back(res);
}
for(int i=0;i<8;i++){//x为行 i为列
if(!co[i]&&!dg[i+x]&&!udg[x-i+8]){
co[i]=dg[i+x]=udg[x-i+8]=true;
res+=(i+1+'0');
dfs(x+1);
res.pop_back();
co[i]=dg[i+x]=udg[x-i+8]=false;
}
}
}
int main() {
cin>>n;
dfs(0);
// sort(q.begin(),q.end());
cout<<q[n-1];
}
// 64 位输出请用 printf("%lld")
查看18道真题和解析