#include <bits/stdc++.h>
#define n 8
using namespace std;
static int x_move[n] = {2, 2, -1, -1, 1, 1, -2, -2};
static int y_move[n] = {1, -1, 2, -2, 2, -2, 1, -1};
void print(int arr[][n]) {
for (int i = 0 ; i < n ; ++i) {
for (int j = 0 ; j < n ; ++j)
cout<<arr[i][j]<<" ";
cout<<"\n";
}
}
bool safe(int arr[][n] , int r , int c) {
return (r >= 0 && c >= 0 && r < n && c < n && arr[r][c] == -1);
}
bool neighbour(int r , int c , int sr , int sc) {
for (int i = 0 ; i < n ; ++i)
if ((r + x_move[i] == sr) && (c + x_move[i] == sc))
return true;
return false;
}
int depth(int arr[][n] , int r , int c) {
int co = 0;
for (int i = 0 ; i < n ; ++i)
if (safe(arr , r + x_move[i] , c + y_move[i]))
c++;
return c;
}
bool next_one(int arr[][n] , int *r , int *c) {
int nr , nc;
int min_dep_index = -1;
int min_dep = n + 1;
int k;
int s = rand() % n;
for (int co = 0 ; co < n ; ++co) {
int i = (s + co) % n;
nr = *r + x_move[i];
nc = *c + y_move[i];
k = depth(arr , nr , nc);
if (safe(arr , *r , *c) && k < min_dep) {
min_dep_index = i;
min_dep = k;
}
}
if (min_dep_index == -1)
return false;
nr = *r + x_move[min_dep_index];
nc = *c + y_move[min_dep_index];
arr[nr][nc] = arr[*r][*c] + 1;
*r = nr;
*c = nc;
return true;
}
bool foo(int arr[][n]) {
for (int i = 0 ; i < n ; ++i)
for (int j = 0 ; j < n ; ++j)
arr[i][j] = -1;
int r , c , sr , sc;
sc = rand() % n;
sr = rand() % n;
r = sr;
c = sc;
arr[r][c] = 1;
for (int i = 0 ; i < n*n ; ++i) {
if (next_one(arr , &r , &c) == false)
return false;
}
if (!neighbour(r , c , sr , sc))
return false;
print(arr);
return true;
}
int main() {
int arr[n][n];
srand(time(nullptr));
while (foo(arr) == false) {
;
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgbiA4CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKc3RhdGljIGludCB4X21vdmVbbl0gPSB7MiwgMiwgLTEsIC0xLCAxLCAxLCAtMiwgLTJ9OwpzdGF0aWMgaW50IHlfbW92ZVtuXSA9IHsxLCAtMSwgMiwgLTIsIDIsIC0yLCAxLCAtMX07CiAKdm9pZCBwcmludChpbnQgYXJyW11bbl0pIHsKCWZvciAoaW50IGkgPSAwIDsgaSA8IG4gOyArK2kpIHsKCQlmb3IgKGludCBqID0gMCA7IGogPCBuIDsgKytqKQoJCQljb3V0PDxhcnJbaV1bal08PCIgIjsKCQljb3V0PDwiXG4iOwoJfQp9CiAKYm9vbCBzYWZlKGludCBhcnJbXVtuXSAsIGludCByICwgaW50IGMpIHsKCXJldHVybiAociA+PSAwICYmIGMgPj0gMCAmJiByIDwgbiAmJiBjIDwgbiAmJiBhcnJbcl1bY10gPT0gLTEpOwp9CiAKYm9vbCBuZWlnaGJvdXIoaW50IHIgLCBpbnQgYyAsIGludCBzciAsIGludCBzYykgewoJZm9yIChpbnQgaSA9IDAgOyBpIDwgbiA7ICsraSkKCQlpZiAoKHIgKyB4X21vdmVbaV0gPT0gc3IpICYmIChjICsgeF9tb3ZlW2ldID09IHNjKSkKCQkJcmV0dXJuIHRydWU7CglyZXR1cm4gZmFsc2U7Cn0KIAppbnQgZGVwdGgoaW50IGFycltdW25dICwgaW50IHIgLCBpbnQgYykgewoJaW50IGNvID0gMDsKCWZvciAoaW50IGkgPSAwIDsgaSA8IG4gOyArK2kpCgkJaWYgKHNhZmUoYXJyICwgciArIHhfbW92ZVtpXSAsIGMgKyB5X21vdmVbaV0pKQoJCQljKys7CglyZXR1cm4gYzsKfSAKIApib29sIG5leHRfb25lKGludCBhcnJbXVtuXSAsIGludCAqciAsIGludCAqYykgewoJaW50IG5yICwgbmM7IAoJaW50IG1pbl9kZXBfaW5kZXggPSAtMTsKCWludCBtaW5fZGVwID0gbiArIDE7CglpbnQgazsKCWludCBzID0gcmFuZCgpICUgbjsKCWZvciAoaW50IGNvID0gMCA7IGNvIDwgbiA7ICsrY28pIHsKCQlpbnQgaSA9IChzICsgY28pICUgbjsKCQluciA9ICpyICsgeF9tb3ZlW2ldOwoJCW5jID0gKmMgKyB5X21vdmVbaV07CgkJayA9IGRlcHRoKGFyciAsIG5yICwgbmMpOwoJCWlmIChzYWZlKGFyciAsICpyICwgKmMpICYmIGsgPCBtaW5fZGVwKSB7CgkJCW1pbl9kZXBfaW5kZXggPSBpOwoJCQltaW5fZGVwID0gazsKCQl9Cgl9CglpZiAobWluX2RlcF9pbmRleCA9PSAtMSkKCQlyZXR1cm4gZmFsc2U7CgluciA9ICpyICsgeF9tb3ZlW21pbl9kZXBfaW5kZXhdOwoJbmMgPSAqYyArIHlfbW92ZVttaW5fZGVwX2luZGV4XTsKCWFycltucl1bbmNdID0gYXJyWypyXVsqY10gKyAxOwoJKnIgPSBucjsKCSpjID0gbmM7CglyZXR1cm4gdHJ1ZTsKfQogCmJvb2wgZm9vKGludCBhcnJbXVtuXSkgewogICAgZm9yIChpbnQgaSA9IDAgOyBpIDwgbiA7ICsraSkKCQlmb3IgKGludCBqID0gMCA7IGogPCBuIDsgKytqKQoJCQlhcnJbaV1bal0gPSAtMTsKCWludCByICwgYyAsIHNyICwgc2M7CglzYyA9IHJhbmQoKSAlIG47CglzciA9IHJhbmQoKSAlIG47CglyID0gc3I7CgljID0gc2M7CglhcnJbcl1bY10gPSAxOwoJZm9yIChpbnQgaSA9IDAgOyBpIDwgbipuIDsgKytpKSB7CgkJaWYgKG5leHRfb25lKGFyciAsICZyICwgJmMpID09IGZhbHNlKQoJCQlyZXR1cm4gZmFsc2U7Cgl9CglpZiAoIW5laWdoYm91cihyICwgYyAsIHNyICwgc2MpKQoJCXJldHVybiBmYWxzZTsKCXByaW50KGFycik7CglyZXR1cm4gdHJ1ZTsKfQogCmludCBtYWluKCkgewoJaW50IGFycltuXVtuXTsKCXNyYW5kKHRpbWUobnVsbHB0cikpOwoJd2hpbGUgKGZvbyhhcnIpID09IGZhbHNlKSB7Cgk7Cgl9CglyZXR1cm4gMDsKfQ==