题干
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;
}