题解 | #八皇后#
八皇后
https://www.nowcoder.com/practice/fbf428ecb0574236a2a0295e1fa854cb
#include <iostream> #include <vector> using namespace std; const int N=9; int a[N][N]; bool vis_col[N]; vector<vector<int>> res_col; bool check(int row,int col){//判对角线是否有皇后 for(int i=1;i<row;i++){ for(int j=1;j<=8;j++){ if(abs(row-i)==abs(col-j)){ if(a[i][j]==1){ return true; } } } } return false; } void dfs(int u,vector<int> &col){ if(u==9){ res_col.push_back(col); return ; } for(int j=1;j<=8;j++){ if(!vis_col[j]&&!check(u,j)){ vis_col[j]=true; a[u][j]=1;//放皇后 col.push_back(j);//记录每一行皇后所在的列数 dfs(u+1,col); //回溯 vis_col[j]=false; a[u][j]=0; col.pop_back(); } } } int main() { int b; vector<int> col; dfs(1,col); while(cin>>b){ vector<int> res=res_col[b-1]; for(int i=0;i<res.size();i++){ cout<<res[i]; } cout<<endl; } return 0; }