#include <iostream> #include<vector> using namespace std; vector<int>res; vector<vector<int>>board(8,vector<int>(8,0)); //棋盘 bool judge(int x,int y){ //能否放置 for(int i=0;i<x;i++){ if(board[i][y]) return false; //判断列(行无须判断) int j=i+y-x; if(j>=0 && board[i][j]) return false; //判断两对角 j=x+y-i; if(j<8 && board[i][j]) return false; } return true; } void dfs(int x,int y,int cur){ //x,y为当前尝试放置的坐标 if(judge(x,y)){ //可放置 if(x==7) { res.push_back(cur*10+(y+1)); //已经是最后一行,直接添加结果并返回 return; } else{ //不是最后一行 board[x][y]=1; //放置当前坐标下 dfs(x+1,0,cur*10+(y+1)); //尝试放在下一行第一个 board[x][y]=0; //回溯,该格设为不放置 } } if(y!=7) dfs(x,y+1,cur); //无论当前该格可不可以放置,都尝试放在下一格 } int main() { dfs(0,0,0); int n; while(cin>>n){ cout<<res[n-1]<<endl; } }