martarubtsova

Untitled

May 11th, 2018
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.54 KB | None | 0 0
  1. #include < iostream >
  2. #include < vector >
  3. #include < algorithm >
  4. using namespace std;
  5.  
  6. int n = 0, k = 0, cnt = 0, lastx = 0, lasty = 0;
  7. vector < int > v;
  8. vector < vector < int > > used;
  9.  
  10. int dx[] = { -1, -1, 1, 1, -2, -2, 2, 2 };
  11. int dy[] = { -2, 2, -2, 2, -1, 1, -1, 1 };
  12.  
  13. bool ok(int x, int y)
  14. {
  15.     for (int i = 0; i < 8; i++)
  16.         if (x + dx[i] >= 0 && x + dx[i] < n && y + dy[i] >= 0 && y + dy[i] < n)
  17.             if (used[x + dx[i]][y + dy[i]] == 1)
  18.                 return false;
  19.     return true;
  20. }
  21.  
  22. void f (int x, int y, int c)
  23. {
  24.     if (c == k)
  25.     {
  26.         cnt++;
  27.         cout << " count = " << cnt << endl;
  28.         for (int i = 0; i < n; i++)
  29.         {
  30.             for (int j = 0; j < n; j++)
  31.                 cout << used[i][j] << ' ';
  32.             cout << endl;
  33.         }
  34.         cout << "-----------------------------" << endl;
  35.     }
  36.     else
  37.         if (c < k)
  38.         {
  39.             if (used[x][y] == 0 && ok(x, y))
  40.             {
  41.                 used[x][y] = 1;
  42.                 lastx = x;
  43.                 lasty = y;
  44.                 c++;
  45.                 if (c == k)
  46.                     f(x, y, c);
  47.                 else
  48.                 {
  49.                     for (int j = y + 1; j < n; j++)
  50.                         f(x, j, c);
  51.                     for (int i = x + 1; i < n; i++)
  52.                         for (int j = 0; j < n; j++)
  53.                             f(i, j, c);
  54.                    
  55.                 }
  56.                 used[x][y] = 0;
  57.                 c--;
  58.             }
  59.         }
  60. }
  61.  
  62. int main()
  63. {
  64.     scanf("%d", &n);
  65.     scanf("%d", &k);
  66.     if (k == 1 || k == 0)
  67.     {
  68.         cout << n * n;
  69.         return 0;
  70.     }
  71.     v = vector < int >(n);
  72.     used = vector < vector < int > >(n);
  73.     for (int i = 0; i < n; i++)
  74.     {
  75.         vector < int > a(n);
  76.         for (int j = 0; j < n; j++)
  77.             a[j] = 0;
  78.         used[i] = a;
  79.     }
  80.     for (int i = 0; i < n; i++)
  81.         for (int j = 0; j < n; j++)
  82.             f(i, j, 0);
  83.     printf("%d", cnt);
  84. }
Advertisement
Add Comment
Please, Sign In to add comment