Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cstdio>
- #include <iostream>
- using namespace std;
- int a[4][4], res = int(1e9);
- bool eq(int x1, int y1, int x2, int y2) {
- x2--, y2--;
- return (a[x1][y1] == a[x1][y2] && a[x1][y1] == a[x2][y1] && a[x1][y1] == a[x2][y2]);
- }
- bool check() {
- return (eq(0, 0, 2, 2) && eq(0, 2, 2, 4) && eq(2, 0, 4, 2) && eq(2, 2, 4, 4));
- }
- void dfs(int h) {
- if (h > 10) return;
- if (check()) {
- res = min(res, h);
- return;
- }
- if (h > res) return;
- int cpy[4][4];
- for (int i = 0; i < 4; i++)
- for (int j = 0; j < 4; j++)
- cpy[i][j] = a[i][j];
- a[3][1] = cpy[1][0];
- a[2][3] = cpy[3][1];
- a[0][2] = cpy[2][3];
- a[1][0] = cpy[0][2];
- dfs(h + 1);
- a[1][0] = cpy[3][1];
- a[3][1] = cpy[2][3];
- a[2][3] = cpy[0][2];
- a[0][2] = cpy[1][0];
- dfs(h + 1);
- for (int i = 0; i < 4; i++)
- for (int j = 0; j < 4; j++)
- a[i][j] = cpy[i][j];
- a[2][0] = cpy[0][1];
- a[3][2] = cpy[2][0];
- a[1][3] = cpy[3][2];
- a[0][1] = cpy[1][3];
- dfs(h + 1);
- a[0][1] = cpy[2][0];
- a[2][0] = cpy[3][2];
- a[3][2] = cpy[1][3];
- a[1][3] = cpy[0][1];
- dfs(h + 1);
- for (int i = 0; i < 4; i++)
- for (int j = 0; j < 4; j++)
- a[i][j] = cpy[i][j];
- a[3][0] = cpy[0][0];
- a[3][3] = cpy[3][0];
- a[0][3] = cpy[3][3];
- a[0][0] = cpy[0][3];
- dfs(h + 1);
- a[0][0] = cpy[3][0];
- a[3][0] = cpy[3][3];
- a[3][3] = cpy[0][3];
- a[0][3] = cpy[0][0];
- dfs(h + 1);
- for (int i = 0; i < 4; i++)
- for (int j = 0; j < 4; j++)
- a[i][j] = cpy[i][j];
- a[1][2] = cpy[1][1];
- a[2][2] = cpy[1][2];
- a[2][1] = cpy[2][2];
- a[1][1] = cpy[2][1];
- dfs(h + 1);
- a[1][1] = cpy[1][2];
- a[1][2] = cpy[2][2];
- a[2][2] = cpy[2][1];
- a[2][1] = cpy[1][1];
- dfs(h + 1);
- for (int i = 0; i < 4; i++)
- for (int j = 0; j < 4; j++)
- a[i][j] = cpy[i][j];
- }
- int main() {
- for (int i = 0; i < 4; i++)
- for (int j = 0; j < 4; j++)
- cin >> a[i][j];
- dfs(0);
- cout << res;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement