#include <bits/stdc++.h> using namespace std; vector<string> res; //判断一下如果皇后放在坐标(x,y)会不会与现有皇后有冲突 bool noattack(int x, int y, int chess[][9]) { bool flag = 1; //默认不冲突 //判断横 for (int i = 1; i < 9; i++) { if (i != y && chess[x][i] == 1) { flag = 0; break; } } //判断竖 for (int i = 1; i < 9; i++) { if (i != x && chess[i][y] == 1) { flag = 0; break; } } //处理对角线 int y1 = y - 1; int y2 = y + 1; for (int i = x - 1; i > 0; i--) { //判断左上方对角线有无冲突 if (y1 > 0 && chess[i][y1] == 1) { flag = 0; break; } //判断右上方对角线有无冲突 if (y2 < 9 && chess[i][y2] == 1) { flag = 0; break; } y1--; y2++; } return flag; } void eight_queen(int index, string temp, int chess[][9]) { if (index == 9) {//index是纵坐标,默认1,2.....8增长,等到了9就应该收集结果 res.push_back(temp);//收集结果 return; } for (int i = 1; i < 9; i++) { //没有冲突的话(index,i)这个位置就可以放置 if (noattack(index, i, chess)) { chess[index][i] = 1;//将这个位置进行标记 temp += char(i + '0');//加入结果串 eight_queen(index + 1, temp, chess); temp.pop_back();//回溯 chess[index][i] = 0;//回溯 } } } int main() { int k; while (cin >> k) { res.clear(); string t = ""; //初始化棋盘 int chess[9][9]; for (int i = 0; i < 9; i++) { for (int j = 0; j < 9; j++) { chess[i][j] = 0; } } //纵坐标从1开始按顺序放入 eight_queen(1, t, chess); //字典序排序 sort(res.begin(), res.end()); cout << res[k - 1] << endl; } } // 64 位输出请用 printf("%lld")