Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <set>
- #include <vector>
- #include <deque>
- #define se second
- #define fi first
- #define mp make_pair
- #define pb push_back
- using namespace std;
- char step(vector<vector<char>> field, char turn, int left) {
- bool f = false;
- for (int i = 0; i < 3; i++) {
- if ((field[0][i] == field[1][i]) && (field[1][i] == field[2][i]) && (field[1][i] != '#')) f = true;
- if ((field[i][0] == field[i][1]) && (field[i][1] == field[i][2]) && (field[i][1] != '#')) f = true;
- }
- if ((field[0][0] == field[1][1]) && (field[1][1] == field[2][2]) && (field[0][0] != '#')) f = true;
- if ((field[0][2] == field[1][1]) && (field[1][1] == field[2][0]) && (field[0][2] != '#')) f = true;
- if (f) return 'l';
- if (left == 0) return 'd';
- bool w_flag = false;
- bool d_flag = false;
- bool l_flag = false;
- for (int i = 0; i < 3; i++) {
- for (int j = 0; j < 3; j++) {
- if (field[i][j] == '#') {
- field[i][j] = turn;
- char res;
- if (turn == 'X') {
- res = step(field, 'O', left - 1);
- } else {
- res = step(field, 'X', left - 1);
- }
- field[i][j] = '#';
- if (res == 'w') w_flag = true;
- else if (res == 'd') d_flag = true;
- else l_flag = true;
- }
- }
- }
- if (l_flag) return 'w';
- if (d_flag) return 'd';
- return 'l';
- }
- int main() {
- vector<vector<char>> field(3, vector<char>(3));
- for (vector<char>& e : field) {
- string s;
- cin >> s;
- e[0] = s[0];
- e[1] = s[1];
- e[2] = s[2];
- }
- char res = step(field, 'X', 3);
- if (res == 'w') cout << "Crosses win";
- else if (res == 'd') cout << "Draw";
- else cout << "Ouths win";
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement