Advertisement
nq1s788

крестики нолики

Apr 12th, 2025
305
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.87 KB | None | 0 0
  1. #include <iostream>
  2. #include <set>
  3. #include <vector>
  4. #include <deque>
  5.  
  6. #define se second
  7. #define fi first
  8. #define mp make_pair
  9. #define pb push_back
  10.  
  11. using namespace std;
  12.  
  13. char step(vector<vector<char>> field, char turn, int left) {
  14.     bool f = false;
  15.     for (int i = 0; i < 3; i++) {
  16.         if ((field[0][i] == field[1][i]) && (field[1][i] == field[2][i]) && (field[1][i] != '#')) f = true;
  17.         if ((field[i][0] == field[i][1]) && (field[i][1] == field[i][2]) && (field[i][1] != '#')) f = true;
  18.     }
  19.     if ((field[0][0] == field[1][1]) && (field[1][1] == field[2][2]) && (field[0][0] != '#')) f = true;
  20.     if ((field[0][2] == field[1][1]) && (field[1][1] == field[2][0]) && (field[0][2] != '#')) f = true;
  21.     if (f) return 'l';
  22.     if (left == 0) return 'd';
  23.     bool w_flag = false;
  24.     bool d_flag = false;
  25.     bool l_flag = false;
  26.     for (int i = 0; i < 3; i++) {
  27.         for (int j = 0; j < 3; j++) {
  28.             if (field[i][j] == '#') {
  29.                 field[i][j] = turn;
  30.                 char res;
  31.                 if (turn == 'X') {
  32.                     res = step(field, 'O', left - 1);
  33.                 } else {
  34.                     res = step(field, 'X', left - 1);
  35.                 }
  36.                 field[i][j] = '#';
  37.                 if (res == 'w') w_flag = true;
  38.                 else if (res == 'd') d_flag = true;
  39.                 else l_flag = true;
  40.             }
  41.         }
  42.     }
  43.     if (l_flag) return 'w';
  44.     if (d_flag) return 'd';
  45.     return 'l';
  46. }
  47.  
  48. int main() {
  49.     vector<vector<char>> field(3, vector<char>(3));
  50.     for (vector<char>& e : field) {
  51.         string s;
  52.         cin >> s;
  53.         e[0] = s[0];
  54.         e[1] = s[1];
  55.         e[2] = s[2];
  56.     }
  57.     char res = step(field, 'X', 3);
  58.     if (res == 'w') cout << "Crosses win";
  59.     else if (res == 'd') cout << "Draw";
  60.     else cout << "Ouths win";
  61.     return 0;
  62. }
  63.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement