题干
C++实现
- 深度优先遍历,注意回溯
- 打表法:先求出所有解,再存入一个容器中
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <vector>
using namespace std;
vector<vector<int>> queenVec;
void DFSFindQueen(vector<int>& queen, int pos) {
for (int i = 1; i <= 8; ++i) {
bool isOk = true;
for (int j = 0; j < pos; ++j) {
if (queen[j] == i || pos - j == queen[j] - i || pos - j == i - queen[j]) {
isOk = false;
break;
}
}
if (isOk) {
queen.push_back(i);
if (pos == 7) {
queenVec.push_back(queen);
printf("\"");
for (int k = 0; k < 8; k++)
{
printf("%d", queen[k]);
}
printf("\",\n");
}
else {
DFSFindQueen(queen, pos + 1);
}
queen.pop_back();
}
}
}
vector<string> queenString = {
"15863724",
"16837425",
"17468253",
"17582463",
"24683175",
"25713864",
"25741863",
"26174835",
"26831475",
"27368514",
"27581463",
"28613574",
"31758246",
"35281746",
"35286471",
"35714286",
"35841726",
"36258174",
"36271485",
"36275184",
"36418572",
"36428571",
"36814752",
"36815724",
"36824175",
"37285146",
"37286415",
"38471625",
"41582736",
"41586372",
"42586137",
"42736815",
"42736851",
"42751863",
"42857136",
"42861357",
"46152837",
"46827135",
"46831752",
"47185263",
"47382516",
"47526138",
"47531682",
"48136275",
"48157263",
"48531726",
"51468273",
"51842736",
"51863724",
"52468317",
"52473861",
"52617483",
"52814736",
"53168247",
"53172864",
"53847162",
"57138642",
"57142863",
"57248136",
"57263148",
"57263184",
"57413862",
"58413627",
"58417263",
"61528374",
"62713584",
"62714853",
"63175824",
"63184275",
"63185247",
"63571428",
"63581427",
"63724815",
"63728514",
"63741825",
"64158273",
"64285713",
"64713528",
"64718253",
"68241753",
"71386425",
"72418536",
"72631485",
"73168524",
"73825164",
"74258136",
"74286135",
"75316824",
"82417536",
"82531746",
"83162574",
"84136275"
};
int main()
{
int n;
scanf("%d", &n);
for (int i = 0; i < n; i++)
{
int b;
scanf("%d", &b);
printf("%s\n", queenString[b-1].c_str());
}
return 0;
}