Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector> ;
- using namespace std;
- vector<pair<int, int>> array;
- int a(int n, int k) {
- if (k == n) { // если вдруг прошли уже всю доску то очевидно доступна 1 позиция
- return 1;
- }
- int sum = 0;
- for (int i = 0; i < n; i++) { // перебираем все колонки
- bool is_attacking = false;
- for (int j = 0; j < array.size(); j++) { // перебираем всех уже заполненых ферзей
- if (array[j].first == i || abs(array[j].first - i) == abs(array[j].second - k)) {
- is_attacking = true; // текущую позицию уже ктото атакует
- break;
- }
- }
- if (!is_attacking) { // если никто не атакует
- array.push_back({i, k}); // занимем эту позицию ферзём
- sum += a(n, k + 1); // находим сколько возможных позиций ещё есть
- array.pop_back(); // удаляем этого ферзя
- }
- }
- return sum; // возвращаем количество позиций
- }
- int main()
- {
- int n;
- cin >> n;
- cout << a(n, 0);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement