八皇后问题

xiaoxiao2021-02-28  90

#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; }
转载请注明原文地址: https://www.6miu.com/read-71182.html

最新回复(0)