题解 | #八皇后#

八皇后

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

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-09 12:30
点赞 评论 收藏
分享
强大的马里奥:不太可能,我校计算机硕士就业率99%
点赞 评论 收藏
分享
仁者伍敌:实习生要工作经验,工作要实习经验
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务