Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include < iostream >
- #include < vector >
- #include < algorithm >
- using namespace std;
- int n = 0, k = 0, cnt = 0, lastx = 0, lasty = 0;
- vector < int > v;
- vector < vector < int > > used;
- int dx[] = { -1, -1, 1, 1, -2, -2, 2, 2 };
- int dy[] = { -2, 2, -2, 2, -1, 1, -1, 1 };
- bool ok(int x, int y)
- {
- for (int i = 0; i < 8; i++)
- if (x + dx[i] >= 0 && x + dx[i] < n && y + dy[i] >= 0 && y + dy[i] < n)
- if (used[x + dx[i]][y + dy[i]] == 1)
- return false;
- return true;
- }
- void f (int x, int y, int c)
- {
- if (c == k)
- {
- cnt++;
- cout << " count = " << cnt << endl;
- for (int i = 0; i < n; i++)
- {
- for (int j = 0; j < n; j++)
- cout << used[i][j] << ' ';
- cout << endl;
- }
- cout << "-----------------------------" << endl;
- }
- else
- if (c < k)
- {
- if (used[x][y] == 0 && ok(x, y))
- {
- used[x][y] = 1;
- lastx = x;
- lasty = y;
- c++;
- if (c == k)
- f(x, y, c);
- else
- {
- for (int j = y + 1; j < n; j++)
- f(x, j, c);
- for (int i = x + 1; i < n; i++)
- for (int j = 0; j < n; j++)
- f(i, j, c);
- }
- used[x][y] = 0;
- c--;
- }
- }
- }
- int main()
- {
- scanf("%d", &n);
- scanf("%d", &k);
- if (k == 1 || k == 0)
- {
- cout << n * n;
- return 0;
- }
- v = vector < int >(n);
- used = vector < vector < int > >(n);
- for (int i = 0; i < n; i++)
- {
- vector < int > a(n);
- for (int j = 0; j < n; j++)
- a[j] = 0;
- used[i] = a;
- }
- for (int i = 0; i < n; i++)
- for (int j = 0; j < n; j++)
- f(i, j, 0);
- printf("%d", cnt);
- }
Advertisement
Add Comment
Please, Sign In to add comment