Задача Дана шахматная доска размера n×n. Найдите количество всевозможных различных расстановок n ферзей на этой доске. При этом никакие два ферзя не должны "бить" друг друга. я пытался решить ее, но суть в том что надо именно рекурсивно. код [CODE=c++]#include <vector> #include <iostream> using namespace std; int desk[10][10]; int n, var = 0; void ferz(int j) { for (int i = 0; i < n; ++i) { desk[i][j] = 1; ferz(j + 1); desk[i][j] = 0; var++; } if (j == n) { var++; } else{ cout << var; } } int main() { cin >> n; ferz(0); }[/CODE] если не сложно то добавьте несколько комментариев спасибо
impelix, #include<iostream> using namespace std; unsigned size; inline bool strike(const pair<int, int>& x, const pair<int, int>& y) { if (x.first == y.first || x.second == y.second) return false; if (abs(x.first - y.first) == abs(x.second - y.second)) return false; return true; } void finder(pair<int, int> x, pair<int, int> y, size_t& var) { static pair<int, int> max_c = { ::size - 1, ::size - 1 }; if (x == max_c && y == max_c) return; var += (x != y && strike(x, y)); y.second++; if (y.second == ::size) { y.second = 0; y.first++; } if (y.first == ::size) { y.first = 0; x.second++; } if (x.second == ::size) { x.second = 0; x.first++; } finder(x, y, var); } int main() { cin >> ::size; size_t variations{}; finder({ 0,0 }, { 0, 0 }, variations); cout << variations; } C #include<iostream> using namespace std; unsigned size; inline bool strike(const pair<int, int>& x, const pair<int, int>& y) { if (x.first == y.first || x.second == y.second) return false; if (abs(x.first - y.first) == abs(x.second - y.second)) return false; return true; } void finder(pair<int, int> x, pair<int, int> y, size_t& var) { static pair<int, int> max_c = { ::size - 1, ::size - 1 }; if (x == max_c && y == max_c) return; var += (x != y && strike(x, y)); y.second++; if (y.second == ::size) { y.second = 0; y.first++; } if (y.first == ::size) { y.first = 0; x.second++; } if (x.second == ::size) { x.second = 0; x.first++; } finder(x, y, var); } int main() { cin >> ::size; size_t variations{}; finder({ 0,0 }, { 0, 0 }, variations); cout << variations; }