Advertisement
Malinovsky239

УРКОП 2011: F

Oct 22nd, 2011
180
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.95 KB | None | 0 0
  1. #include <cstdio>
  2. #include <iostream>
  3.  
  4. using namespace std;
  5.  
  6. int a[4][4], res = int(1e9);
  7.  
  8. bool eq(int x1, int y1, int x2, int y2) {
  9.     x2--, y2--;
  10.     return (a[x1][y1] == a[x1][y2] && a[x1][y1] == a[x2][y1] && a[x1][y1] == a[x2][y2]);
  11. }
  12.  
  13. bool check() {
  14.     return (eq(0, 0, 2, 2) && eq(0, 2, 2, 4) && eq(2, 0, 4, 2) && eq(2, 2, 4, 4));
  15. }
  16.  
  17. void dfs(int h) {
  18.     if (h > 10) return;
  19.  
  20.     if (check()) {
  21.         res = min(res, h);
  22.         return;
  23.     }
  24.     if (h > res) return;
  25.  
  26.     int cpy[4][4];
  27.  
  28.     for (int i = 0; i < 4; i++)
  29.         for (int j = 0; j < 4; j++)
  30.             cpy[i][j] = a[i][j];   
  31.  
  32.     a[3][1] = cpy[1][0];
  33.     a[2][3] = cpy[3][1];
  34.     a[0][2] = cpy[2][3];
  35.     a[1][0] = cpy[0][2];
  36.  
  37.     dfs(h + 1);
  38.  
  39.     a[1][0] = cpy[3][1];
  40.     a[3][1] = cpy[2][3];
  41.     a[2][3] = cpy[0][2];
  42.     a[0][2] = cpy[1][0];
  43.  
  44.     dfs(h + 1);
  45.  
  46.     for (int i = 0; i < 4; i++)
  47.         for (int j = 0; j < 4; j++)
  48.             a[i][j] = cpy[i][j];
  49.  
  50.     a[2][0] = cpy[0][1];
  51.     a[3][2] = cpy[2][0];
  52.     a[1][3] = cpy[3][2];
  53.     a[0][1] = cpy[1][3];
  54.  
  55.     dfs(h + 1);
  56.  
  57.     a[0][1] = cpy[2][0];
  58.     a[2][0] = cpy[3][2];
  59.     a[3][2] = cpy[1][3];
  60.     a[1][3] = cpy[0][1];
  61.  
  62.     dfs(h + 1);
  63.  
  64.     for (int i = 0; i < 4; i++)
  65.         for (int j = 0; j < 4; j++)
  66.             a[i][j] = cpy[i][j];
  67.  
  68.     a[3][0] = cpy[0][0];
  69.     a[3][3] = cpy[3][0];
  70.     a[0][3] = cpy[3][3];
  71.     a[0][0] = cpy[0][3];
  72.  
  73.     dfs(h + 1);
  74.  
  75.     a[0][0] = cpy[3][0];
  76.     a[3][0] = cpy[3][3];
  77.     a[3][3] = cpy[0][3];
  78.     a[0][3] = cpy[0][0];
  79.  
  80.     dfs(h + 1);
  81.  
  82.     for (int i = 0; i < 4; i++)
  83.         for (int j = 0; j < 4; j++)
  84.             a[i][j] = cpy[i][j];
  85.  
  86.     a[1][2] = cpy[1][1];
  87.     a[2][2] = cpy[1][2];
  88.     a[2][1] = cpy[2][2];
  89.     a[1][1] = cpy[2][1];
  90.  
  91.     dfs(h + 1);
  92.  
  93.     a[1][1] = cpy[1][2];
  94.     a[1][2] = cpy[2][2];
  95.     a[2][2] = cpy[2][1];
  96.     a[2][1] = cpy[1][1];
  97.  
  98.     dfs(h + 1);
  99.  
  100.     for (int i = 0; i < 4; i++)
  101.         for (int j = 0; j < 4; j++)
  102.             a[i][j] = cpy[i][j];
  103. }
  104.  
  105. int main() {
  106.     for (int i = 0; i < 4; i++)
  107.         for (int j = 0; j < 4; j++)
  108.             cin >> a[i][j];
  109.  
  110.     dfs(0);        
  111.  
  112.     cout << res;
  113.            
  114.     return 0;
  115. }
  116.                                
  117.  
  118.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement