八皇后问题

题目https://www.nowcoder.com/practice/fbf428ecb0574236a2a0295e1fa854cb?tpId=61&tqId=29558&tPage=3&ru=/kaoyan/retest/1002&qru=/ta/pku-kaoyan/question-ranking

#include
#include
#include
#include
#include
using namespace std;
//输出八皇后问题的解
vector<int> A;
int Q[8][8]={0};
bool Judge(int row,int col){
    for(int i=0;i<8;i++){//判断列
        if(Q[i][col]==1){
            return false;
        }
    }
    for(int i=row,j=col;i>=0&&j>=0;i--,j--){//判断左上角
        if(Q[i][j]==1){
            return false;
        }
}
    for(int i=row,j=col;i>=0&&j<8;i--,j++){
        if(Q[i][j]==1)
            return false;
    }
    return true;
}
void DFS(int row,int ans){
    if(row==8){
       A.push_back(ans);
        return;
    }
    for(int col=0;col<8;col++){
        if(Judge(row,col)){
            Q[row][col]=1;
            DFS(row+1,ans*10+col+1);
            Q[row][col]=0;
        }
}
}
int main(){
    DFS(0,0);
    sort(A.begin(),A.end());
    int index;
    while(scanf("%d",&index)!=EOF){
        cout<<A[index-1]<<endl;
    }
}

你可能感兴趣的:(深度优先,c++,算法)