Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- int n = 4;
- int m = 6;
- int matrix[100][100] = { {0, 0, 0, 1, 1, 2},
- {2, 0, 0, 0, 1, 0},
- {2, 0, 1, 0, 0, 0},
- {0, 0, 1, 0, 0, 2}
- };
- bool visited[100][100];
- const int dx[4] = {0, 0, 1, -1};
- const int dy[4] = {1, -1, 0 , 0};
- int inside(int i, int j)
- {
- return i >= 0 && i < n && j >= 0 && j < m;
- }
- void Fill(int i, int j, int elem)
- {
- // cout << "IN FILL\n";
- visited[i][j] = true;
- for (int k = 0; k <= 3; ++k)
- if (inside(i + dx[k], j + dy[k]) && matrix[i + dx[k]][j + dy[k]] == elem && !visited[i + dx[k]][j + dy[k]])
- Fill(i + dx[k], j + dy[k], elem);
- // cout << "OUT FILL\n";
- }
- int validSubMatrix(int left1, int right1, int left2, int right2)
- {
- return left1 <= left2 && right1 <= right2;
- }
- int CountAreas(int left1, int right1, int n, int m, int elem)
- {
- cout << "(" << left1 << "," << right1 << ")" << " (" << n << "," << m << ")\n";
- int mijl = (n - left1) >> 1;
- int mijc = (m - right1) >> 1;
- // cout << "l = " << mijl << " c = " << mijc << endl << endl;
- if (left1 < n || right1 < m )
- {
- int z1, z2, z3, z4;
- z1 = z2 = z3 = z4 = 0;
- if (validSubMatrix(left1, right1, left1 + mijl, right1 + mijc))
- z1 = CountAreas(left1, right1, left1 + mijl, right1 + mijc, elem); /// Z1
- if (validSubMatrix(left1, right1 + mijc + 1, left1 + mijl, m))
- z2 = CountAreas(left1, right1 + mijc + 1, left1 + mijl, m, elem); /// Z2
- if (validSubMatrix(left1 + mijl + 1, right1 , n , right1 + mijc))
- z3 = CountAreas(left1 + mijl + 1, right1, n, right1 + mijc, elem); /// Z3
- if (validSubMatrix(left1 + mijl + 1, right1 + mijc + 1, n, m))
- z4 = CountAreas(left1 + mijl + 1, right1 + mijc + 1, n, m, elem); /// Z4
- return z1 + z2 + z3 + z4;
- }
- else
- {
- // cout << "HERE\n";
- if (!visited[left1][right1] && matrix[left1][right1] == elem)
- {
- Fill(left1, right1, elem);
- return 1;
- }
- return 0;
- }
- }
- int GetWinner()
- {
- int player1 = CountAreas(0, 0, n - 1, m - 1, 1);
- int player2 = CountAreas(0, 0, n - 1, m - 1, 2);
- return player1 > player2 ? 1 : 2;
- }
- int main()
- {
- for (int i = 0; i < n; ++i, cout << endl)
- for (int j = 0; j < m; ++j)
- cout << matrix[i][j] << " ";
- cout << endl << endl;
- cout << GetWinner();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement