35657

Untitled

Jun 16th, 2024
678
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.71 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. int field_size, max_count, cnt = 0, result = 0;
  6. int* row; // массив номеров строк
  7. int* col; // массив номеров столбцов
  8. int* main_diag; // массив номеров диагоналей, параллельных главной
  9. int* side_diag; // массив номеров диагоналей, параллельных побочной
  10.  
  11.  
  12. void get_count(int i = 0, int k = 0) { // i - номер строки
  13.     for (int j = k; j < field_size; ++j) { // j - номер столбца
  14.         if (row[i] < 2 && col[j] < 2 && main_diag[i + j] < 2 && side_diag[field_size - i + j] < 2) {
  15.  
  16.             if (cnt == max_count - 1) {
  17.                 result++;
  18.                 return;
  19.             }
  20.             else {
  21.                 row[i]++;
  22.                 col[j]++;
  23.                 main_diag[i + j]++;
  24.                 side_diag[field_size - i + j]++;
  25.                 cnt++;
  26.  
  27.                 row[i] == 2 ? get_count(i + 1, 0) : get_count(i, j + 1);
  28.  
  29.                 row[i]--;
  30.                 col[j]--;
  31.                 main_diag[i + j]--;
  32.                 side_diag[field_size - i + j]--;
  33.                 cnt--;
  34.             }
  35.         }
  36.     }
  37. }
  38.  
  39. int main() {
  40.  
  41.     setlocale(LC_ALL, "ru");
  42.  
  43.     cout << "Введите размер поля: ";
  44.  
  45.     cin >> field_size;
  46.  
  47.     max_count = field_size * 2;
  48.  
  49.     row = new int[field_size] {};
  50.  
  51.     col = new int[field_size] {};
  52.  
  53.     main_diag = new int[field_size * 2] {};
  54.  
  55.     side_diag = new int[field_size * 2] {};
  56.  
  57.     get_count();
  58.     cout << endl << "Количество расстановок: " << result << endl;
  59.  
  60.     delete[] row, col, main_diag, side_diag;
  61. }
Advertisement
Add Comment
Please, Sign In to add comment