//土尔逊Torson 编写于2023/06/16 #define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <cstdio> #include <algorithm> #include <vector> #include <string> #include <cstring> #include <stdlib.h> using namespace std; //a:棋盘当前的状态 row[i]:第i行有元素 col[i]:第j列有元素 //eye1:主对角线(x+n-y定值) eye2:次对角线(x+y定值) const int MAX = 9; long long row[MAX], col[MAX], eye1[MAX * 3], eye2[MAX * 3], n = 8, res = 0, b; vector<string> v; void dfs12501(long long x, string s) {//对第x行进行搜索 if (x == n + 1) { res++; v.push_back(s); return; }//成功凑成n皇后 for (int i = 1; i <= n; i++) {//尝试第一行的每个位置 if (!row[x] && !col[i] && !eye1[x + n - i] && !eye2[x + i]) { row[x] = col[i] = eye1[x + n - i] = eye2[x + i] = 1; s += i + '0'; dfs12501(x + 1, s);//x行有了皇后 继续到下一行 s.erase(s.end() - 1); row[x] = col[i] = eye1[x + n - i] = eye2[x + i] = 0;//回溯 } } } int main() { while (cin >> b) { res = 0; string s; v.clear(); dfs12501(1, s); sort(v.begin(), v.end()); cout << v[b - 1] << endl; } system("pause"); return EXIT_SUCCESS; } // 64 位输出请用 printf("%lld")