#include <iostream>
#include <vector>
using namespace std;
void solvingQueen(vector<vector<int>> &result, vector<int> &vec, int i)
{
if (i == vec.size()-1)
result.push_back(vec);
else
{
for (int j = i; j < vec.size(); ++j)
{
swap(vec[j], vec[i]);
solvingQueen(result, vec, i+1);
swap(vec[i],vec[j]);
}
}
}
vector<vector<int>> Queen(vector<int> &queen) {
if (queen.empty())
return vector<vector<int>>();
vector<vector<int>> result;
solvingQueen(result, queen, 0);
return result;
}
int main(int argc, char** argv)
{
const int NUMBEROFQUEEN = 8; // 皇后数,可以更改
int count = 0;
vector<int> queen;
for (int i = 0; i < NUMBEROFQUEEN; ++i)
queen.push_back(i);
vector<vector<int>> res = Queen(queen);
for (const auto& k : res)
{
bool isQueen = true;
for (int i = 0; i < NUMBEROFQUEEN-1; ++i)
{
for (int j = i+1; j < NUMBEROFQUEEN; ++j)
{
if ((k[i] - k[j] == i - j) || (k[i] - k[j] == j - i))
{
isQueen = false;
break;
}
}
if (!isQueen)
break;
}
if (isQueen)
++count;
}
cout << count << endl;
}
07-07
1392
05-24