题解 | #八皇后#

八皇后

https://www.nowcoder.com/practice/fbf428ecb0574236a2a0295e1fa854cb

#include <iostream>
#include <cstring>
#include <vector>
#include <algorithm>
using namespace std;
vector<string> store;
bool queeneat(int i,int j,int m,int n){//(i,j)是否会吃掉(m,n)
    if(i==m || j==n) return false;
    int k;
    for(k=1;(i+k)<9 && (j+k)<9;k++){
        if((i+k)==m && (j+k)==n) return false;//false即会吃掉
    }
    for(k=1;(i-k)>0 && (j-k)>0;k++){
        if((i-k)==m && (j-k)==n) return false;
    }
    for(k=1;(i-k)>0 && (j+k)<9;k++){
        if((i-k)==m && (j+k)==n) return false;
    }
    for(k=1;(i+k)<9 && (j-k)>0;k++){
        if((i+k)==m && (j-k)==n) return false;
    }
    return true;
}
bool qjudge(int m,int n,string pre){//(m,n)在前缀下是否有效
    for(int i=0;i<pre.length();i++){
        int par=pre[i]-'0';//行和列号,从1开始
        int col=i+1;
        if(!queeneat(par, col, m, n)) return false;
    }
    return true;
}
void EightQ(string pre){
    if(pre.length()==8){
        store.push_back(pre);
        return;
    }
    bool visit[9];
    for(int i=0;i<9;i++) visit[i]=false;
    visit[0]=true;
    for(int i=0;i<pre.length();i++){
        visit[pre[i]-'0']=true;
    }
    int col=pre.length()+1;
    for(int i=1;i<9;i++){
        if(visit[i]) continue;
        if(qjudge(i,col, pre)){
            char ii='0'+i;
            EightQ(pre+ii);
        }
    }
}
int main() {
    int n;
    EightQ("");
    sort(store.begin(),store.end());
    while(cin>>n){
        cout<<store[n-1]<<endl;
    }
}

全部评论

相关推荐

点赞 评论 收藏
分享
10-31 13:04
南华大学 Java
嵌入式的小白:很多面试,面试前不会去打扰cto的,但一般cto不会在这些小事上刷人,只能说这个cto比较操心,啥重要不重要,紧急不紧急的,估计都会过问,平淡看待吧
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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