Advertisement
Bibodui

Ферзи

Jun 20th, 2023
718
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.53 KB | None | 0 0
  1. //Составить рекурсивную функцию, находящую все возможные расстановки
  2. //n ферзей на шахматной доске размером n*n так,
  3. //чтобы они не били друг друга
  4.  
  5. #include <iostream>
  6. #include <vector>
  7.  
  8. using namespace std;
  9.  
  10. bool is_safe(vector<int>& board, int row, int col)
  11. {
  12.     for (int i = 0; i < row; ++i)
  13.     {
  14.         // Проверяем для каждой ранее размещенной фигуры
  15.         // находится ли она на той же горизонтали или диагонали
  16.         // с текущей позицией (row, col).
  17.         if (board[i] == col || board[i] - i == col - row || board[i] + i == col + row)
  18.             return false;
  19.     }
  20.     return true;
  21. }
  22.  
  23. void placement_of_queens(int n, int row, vector<int>& board, vector<vector<int>>& result)
  24. {
  25.     if (row == n)
  26.     {
  27.         // Все ферзи были размещены на доске.
  28.         // Добавляем текущую расстановку в результат.
  29.         result.push_back(board);
  30.         return;
  31.     }
  32.  
  33.     // Размещаем ферзя на текущей строке
  34.     for (int col = 0; col < n; ++col)
  35.     {
  36.         if (is_safe(board, row, col))
  37.         {
  38.             board[row] = col;
  39.             // Рекурсивно размещаем ферзя на следующей строке
  40.             placement_of_queens(n, row + 1, board, result);
  41.         }
  42.     }
  43. }
  44.  
  45. vector<vector<int>> placement_of_queens(int n)
  46. {
  47.     vector<vector<int>> result;
  48.     vector<int> board(n, 0);
  49.     placement_of_queens(n, 0, board, result);
  50.     return result;
  51. }
  52.  
  53. void print_board(vector<int>& board)
  54. {
  55.     int n = board.size();
  56.     for (int i = 0; i < n; ++i)
  57.     {
  58.         for (int j = 0; j < n; ++j)
  59.         {
  60.             if (board[i] == j)
  61.                 cout << "Q ";
  62.             else
  63.                 cout << ". ";
  64.         }
  65.         cout << endl;
  66.     }
  67.     cout << endl;
  68. }
  69.  
  70. int main()
  71. {
  72.     setlocale(LC_ALL, "rus");
  73.  
  74.     int n;
  75.     cout << "Введите размер доски (n x n): ";
  76.     cin >> n;
  77.  
  78.     vector<vector<int>> solutions = placement_of_queens(n);
  79.     int count = solutions.size();
  80.  
  81.     cout << "Количество решений: " << count << endl;
  82.     cout << "Расстановки ферзей:" << endl;
  83.  
  84.     for (vector<int> solution : solutions)
  85.     {
  86.         print_board(solution);
  87.     }
  88.  
  89.     return 0;
  90. }
  91.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement