题解 | #八皇后#

八皇后

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")

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务